aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/codegen.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-03-01 06:30:00 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-03-01 06:30:00 +0000
commitb64d6f4fbb0adb91a2276aedbef5b7753c26232c (patch)
tree9d088a50b7b7a8bfe4767f8fa557a029a10d0d8b /lib/mako/codegen.py
parent3a31591d588479d1b63d23d3835e46de51aa71c2 (diff)
downloadexternal_python_mako-b64d6f4fbb0adb91a2276aedbef5b7753c26232c.tar.gz
external_python_mako-b64d6f4fbb0adb91a2276aedbef5b7753c26232c.tar.bz2
external_python_mako-b64d6f4fbb0adb91a2276aedbef5b7753c26232c.zip
- cache_key argument can now render arguments passed
directly to the %page or %def, i.e. <%def name="foo(x)" cached="True" cache_key="${x}"/> [ticket:78]
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r--lib/mako/codegen.py26
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index 5d974bc..523c3b0 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -176,8 +176,8 @@ class _GenerateRenderMethod(object):
self.printer.writeline(None)
self.printer.write("\n\n")
if cached:
- self.write_cache_decorator(node, name, buffered, self.identifiers, toplevel=True)
-
+ self.write_cache_decorator(node, name, args, buffered, self.identifiers, toplevel=True)
+
def write_module_code(self, module_code):
"""write module-level template code, i.e. that which is enclosed in <%! %> tags
in the template."""
@@ -340,8 +340,8 @@ 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, inline=True, toplevel=False)
-
+ self.write_cache_decorator(node, node.name, namedecls, False, identifiers, inline=True, toplevel=False)
+
def write_def_finish(self, node, buffered, filtered, cached, callstack=True):
"""write the end section of a rendering function, either outermost or inline.
@@ -377,7 +377,7 @@ class _GenerateRenderMethod(object):
"return ''"
)
- def write_cache_decorator(self, node_or_pagetag, name, buffered, identifiers, inline=False, toplevel=False):
+ def write_cache_decorator(self, node_or_pagetag, name, args, buffered, identifiers, inline=False, toplevel=False):
"""write a post-function decorator to replace a rendering callable with a cached version of itself."""
self.printer.writeline("__M_%s = %s" % (name, name))
cachekey = node_or_pagetag.parsed_attributes.get('cache_key', repr(name))
@@ -398,22 +398,22 @@ class _GenerateRenderMethod(object):
else:
cacheargs[arg[1]] = val
- if inline:
- ctx_arg = ""
- else:
- ctx_arg = "context, "
-
- self.printer.writeline("def %s(%s*args, **kwargs):" % (name, ctx_arg))
+ self.printer.writeline("def %s(%s):" % (name, ','.join(args)))
+
+ self.write_variable_declares(identifiers, toplevel=toplevel, limit=node_or_pagetag.undeclared_identifiers())
+
+ # form "arg1, arg2, arg3=arg3, arg4=arg4", etc.
+ pass_args = [ '=' in a and "%s=%s" % ((a.split('=')[0],)*2) or a for a in args]
self.write_variable_declares(identifiers, toplevel=toplevel, limit=node_or_pagetag.undeclared_identifiers())
if buffered:
- s = "context.get('local').get_cached(%s, %screatefunc=lambda:__M_%s(%s*args, **kwargs))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg)
+ s = "context.get('local').get_cached(%s, %screatefunc=lambda:__M_%s(%s))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ','.join(pass_args))
# apply buffer_filters
s = self.create_filter_callable(self.compiler.buffer_filters, s, False)
self.printer.writelines("return " + s,None)
else:
self.printer.writelines(
- "context.write(context.get('local').get_cached(%s, %screatefunc=lambda:__M_%s(%s*args, **kwargs)))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg),
+ "context.write(context.get('local').get_cached(%s, %screatefunc=lambda:__M_%s(%s)))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ','.join(pass_args)),
"return ''",
None
)