aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/codegen.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-03-01 20:30:45 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-03-01 20:30:45 +0000
commitab9c4e6e563483b9be7fc0a28aec41a81e08fe5e (patch)
tree8142de74021608a69069c2d3299a7c8a72ee2c0f /lib/mako/codegen.py
parente5f33d4302b9985fb30b61618d862ce4893acd72 (diff)
downloadexternal_python_mako-ab9c4e6e563483b9be7fc0a28aec41a81e08fe5e.tar.gz
external_python_mako-ab9c4e6e563483b9be7fc0a28aec41a81e08fe5e.tar.bz2
external_python_mako-ab9c4e6e563483b9be7fc0a28aec41a81e08fe5e.zip
- got defs-within-defs to be cacheable
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r--lib/mako/codegen.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index 285e392..0621e27 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -312,7 +312,7 @@ class _GenerateRenderMethod(object):
buffered = eval(node.attributes.get('buffered', 'False'))
cached = eval(node.attributes.get('cached', 'False'))
if buffered or filtered or cached:
- printer.writelines(
+ self.printer.writelines(
"context.push_buffer()",
"try:"
)
@@ -329,7 +329,7 @@ class _GenerateRenderMethod(object):
self.write_def_finish(node, buffered, filtered, cached)
self.printer.writeline(None)
if cached:
- self.write_cache_decorator(node, node.name, False, identifiers)
+ self.write_cache_decorator(node, node.name, False, identifiers, inline=True)
def write_def_finish(self, node, buffered, filtered, cached):
"""write the end section of a rendering function, either outermost or inline.
@@ -352,7 +352,7 @@ class _GenerateRenderMethod(object):
self.printer.writeline("context.write(%s)" % s)
self.printer.writeline("return ''")
- def write_cache_decorator(self, node_or_pagetag, name, buffered, identifiers):
+ def write_cache_decorator(self, node_or_pagetag, name, buffered, identifiers, inline=False):
"""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))
@@ -372,18 +372,23 @@ class _GenerateRenderMethod(object):
cacheargs[arg[1]] == int(eval(val))
else:
cacheargs[arg[1]] = val
+
+ if inline:
+ ctx_arg = ""
+ else:
+ ctx_arg = "context, "
- self.printer.writeline("def %s(context, *args, **kwargs):" % name)
+ self.printer.writeline("def %s(%s*args, **kwargs):" % (name, ctx_arg))
self.write_variable_declares(identifiers, limit=node_or_pagetag.undeclared_identifiers())
if buffered:
self.printer.writelines(
- "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),
+ "return context.get('local').get_cached(%s, %screatefunc=lambda:__%s(%s*args, **kwargs))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg),
None
)
else:
self.printer.writelines(
- "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),
+ "context.write(context.get('local').get_cached(%s, %screatefunc=lambda:__%s(%s*args, **kwargs)))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg),
"return ''",
None
)