aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/codegen.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-12-12 01:17:11 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-12-12 01:17:11 +0000
commita5230eca8532b7000ecbc70b47cd97b0842a1723 (patch)
treed33cf9a5cb736a662bcbbd37a271ca324f4c6b16 /lib/mako/codegen.py
parent001f173c95950acb76d763966a1477aa4fe27345 (diff)
downloadexternal_python_mako-a5230eca8532b7000ecbc70b47cd97b0842a1723.tar.gz
external_python_mako-a5230eca8532b7000ecbc70b47cd97b0842a1723.tar.bz2
external_python_mako-a5230eca8532b7000ecbc70b47cd97b0842a1723.zip
cache file args, can be supplied on TemplateLookup, Template, <%page> tag, <%def> tag
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r--lib/mako/codegen.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index 4de9f9b..81272ea 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -49,6 +49,7 @@ class _GenerateRenderMethod(object):
name = "render"
args = None
buffered = filtered = False
+ self.compiler.pagetag = pagetag
cached = pagetag is not None and eval(pagetag.attributes.get('cached', 'False'))
if args is None:
args = ['context']
@@ -337,17 +338,28 @@ class _GenerateRenderMethod(object):
"""write a post-function decorator to replace a rendering callable with a cached version of itself."""
self.printer.writeline("__%s = %s" % (name, name))
cachekey = node_or_pagetag.parsed_attributes.get('cache_key', repr(name))
+ cacheargs = {}
+ for arg in (('cache_type', 'type'), ('cache_dir', 'data_dir')):
+ val = node_or_pagetag.parsed_attributes.get(arg[0], None)
+ if val is not None:
+ cacheargs[arg[1]] = val
+ else:
+ if self.compiler.pagetag is not None:
+ val = self.compiler.pagetag.parsed_attributes.get(arg[0], None)
+ if val is not None:
+ cacheargs[arg[1]] = val
+
self.printer.writeline("def %s(context, *args, **kwargs):" % name)
self.write_variable_declares(identifiers, limit=node_or_pagetag.undeclared_identifiers())
if buffered:
self.printer.writelines(
- "return _template_cache.get(%s, createfunc=lambda:__%s(context, *args, **kwargs))" % (cachekey, name),
+ "return context.get('local').get_cached(%s, %screatefunc=lambda:__%s(context, *args, **kwargs))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name),
None
)
else:
self.printer.writelines(
- "context.write(_template_cache.get(%s, createfunc=lambda:__%s(context, *args, **kwargs)))" % (cachekey, name),
+ "context.write(context.get('local').get_cached(%s, %screatefunc=lambda:__%s(context, *args, **kwargs)))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name),
"return ''",
None
)