diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-01 06:30:00 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-01 06:30:00 +0000 |
commit | b64d6f4fbb0adb91a2276aedbef5b7753c26232c (patch) | |
tree | 9d088a50b7b7a8bfe4767f8fa557a029a10d0d8b /lib/mako/codegen.py | |
parent | 3a31591d588479d1b63d23d3835e46de51aa71c2 (diff) | |
download | external_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.py | 26 |
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 ) |