aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES6
-rw-r--r--lib/mako/lookup.py19
-rw-r--r--lib/mako/runtime.py7
-rw-r--r--lib/mako/template.py8
-rw-r--r--setup.py2
-rw-r--r--test/cache.py16
6 files changed, 52 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 2e2d893..584c752 100644
--- a/CHANGES
+++ b/CHANGES
@@ -10,6 +10,12 @@
e.g. ${local.cache.get('somekey')} or
template.cache.invalidate_body()
+- added "cache_enabled=True" flag to Template,
+ TemplateLookup. Setting this to False causes cache
+ operations to "pass through" and execute every time;
+ this flag should be integrated in Pylons with its own
+ cache_enabled configuration setting.
+
- the Cache object now supports invalidate_def(name),
invalidate_body(), invalidate_closure(name),
invalidate(key), which will remove the given key
diff --git a/lib/mako/lookup.py b/lib/mako/lookup.py
index f720e4c..8926254 100644
--- a/lib/mako/lookup.py
+++ b/lib/mako/lookup.py
@@ -39,7 +39,7 @@ class TemplateCollection(object):
class TemplateLookup(TemplateCollection):
def __init__(self, directories=None, module_directory=None, filesystem_checks=True, collection_size=-1, format_exceptions=False,
error_handler=None, disable_unicode=False, output_encoding=None, encoding_errors='strict', cache_type=None, cache_dir=None, cache_url=None,
- modulename_callable=None, default_filters=None, buffer_filters=[], imports=None, input_encoding=None, preprocessor=None):
+ cache_enabled=True, modulename_callable=None, default_filters=None, buffer_filters=[], imports=None, input_encoding=None, preprocessor=None):
if isinstance(directories, basestring):
directories = [directories]
self.directories = [posixpath.normpath(d) for d in directories or []]
@@ -47,7 +47,22 @@ class TemplateLookup(TemplateCollection):
self.modulename_callable = modulename_callable
self.filesystem_checks = filesystem_checks
self.collection_size = collection_size
- self.template_args = {'format_exceptions':format_exceptions, 'error_handler':error_handler, 'disable_unicode':disable_unicode, 'output_encoding':output_encoding, 'encoding_errors':encoding_errors, 'input_encoding':input_encoding, 'module_directory':module_directory, 'cache_type':cache_type, 'cache_dir':cache_dir or module_directory, 'cache_url':cache_url, 'default_filters':default_filters, 'buffer_filters':buffer_filters, 'imports':imports, 'preprocessor':preprocessor}
+ self.template_args = {
+ 'format_exceptions':format_exceptions,
+ 'error_handler':error_handler,
+ 'disable_unicode':disable_unicode,
+ 'output_encoding':output_encoding,
+ 'encoding_errors':encoding_errors,
+ 'input_encoding':input_encoding,
+ 'module_directory':module_directory,
+ 'cache_type':cache_type,
+ 'cache_dir':cache_dir or module_directory,
+ 'cache_url':cache_url,
+ 'cache_enabled':cache_enabled,
+ 'default_filters':default_filters,
+ 'buffer_filters':buffer_filters,
+ 'imports':imports,
+ 'preprocessor':preprocessor}
if collection_size == -1:
self.__collection = {}
self._uri_cache = {}
diff --git a/lib/mako/runtime.py b/lib/mako/runtime.py
index a82ffb4..33ac999 100644
--- a/lib/mako/runtime.py
+++ b/lib/mako/runtime.py
@@ -196,6 +196,13 @@ class Namespace(object):
def get_cached(self, key, **kwargs):
if self.template:
+ if not self.template.cache_enabled:
+ createfunc = kwargs.get('createfunc', None)
+ if createfunc:
+ return createfunc()
+ else:
+ return None
+
if self.template.cache_dir:
kwargs.setdefault('data_dir', self.template.cache_dir)
if self.template.cache_type:
diff --git a/lib/mako/template.py b/lib/mako/template.py
index d50eb8a..13823ea 100644
--- a/lib/mako/template.py
+++ b/lib/mako/template.py
@@ -18,7 +18,7 @@ class Template(object):
def __init__(self, text=None, filename=None, uri=None, format_exceptions=False, error_handler=None,
lookup=None, output_encoding=None, encoding_errors='strict', module_directory=None, cache_type=None,
cache_dir=None, cache_url=None, module_filename=None, input_encoding=None, disable_unicode=False, default_filters=None,
- buffer_filters=[], imports=None, preprocessor=None):
+ buffer_filters=[], imports=None, preprocessor=None, cache_enabled=True):
"""construct a new Template instance using either literal template text, or a previously loaded template module
text - textual template source, or None if a module is to be provided
@@ -106,6 +106,7 @@ class Template(object):
self.cache_type = cache_type
self.cache_dir = cache_dir
self.cache_url = cache_url
+ self.cache_enabled = cache_enabled
def source(self):
"""return the template source code for this Template."""
@@ -174,7 +175,7 @@ class ModuleTemplate(Template):
template=None, template_filename=None,
module_source=None, template_source=None,
output_encoding=None, encoding_errors='strict', disable_unicode=False, format_exceptions=False,
- error_handler=None, lookup=None, cache_type=None, cache_dir=None, cache_url=None
+ error_handler=None, lookup=None, cache_type=None, cache_dir=None, cache_url=None, cache_enabled=True
):
self.module_id = re.sub(r'\W', "_", module._template_uri)
self.uri = module._template_uri
@@ -193,7 +194,8 @@ class ModuleTemplate(Template):
self.cache_type = cache_type
self.cache_dir = cache_dir
self.cache_url = cache_url
-
+ self.cache_enabled = cache_enabled
+
class DefTemplate(Template):
"""a Template which represents a callable def in a parent template."""
def __init__(self, parent, callable_):
diff --git a/setup.py b/setup.py
index fc41632..df456fc 100644
--- a/setup.py
+++ b/setup.py
@@ -37,7 +37,7 @@ SVN version:
scripts=['scripts/mako-render'],
zip_safe=False,
install_requires=[
- 'Beaker==dev,>=1.0.4dev',
+ 'Beaker==dev,>=1.1dev',
],
entry_points="""
[python.templating.engines]
diff --git a/test/cache.py b/test/cache.py
index 80f6416..1049b30 100644
--- a/test/cache.py
+++ b/test/cache.py
@@ -49,6 +49,22 @@ class CacheTest(unittest.TestCase):
]
assert m.kwargs == {}
+ def test_cache_enable(self):
+ t = Template("""
+ <%!
+ callcount = [0]
+ %>
+ <%def name="foo()" cached="True">
+ <% callcount[0] += 1 %>
+ </%def>
+ ${foo()}
+ ${foo()}
+ callcount: ${callcount}
+ """, cache_enabled=False)
+ m = self._install_mock_cache(t)
+
+ assert t.render().strip() =="callcount: [2]"
+
def test_nested_def(self):
t = Template("""
<%!