-
-
Notifications
You must be signed in to change notification settings - Fork 66
Closed
Description
Migrated issue, originally created by Michael Bayer (@zzzeek)
possible patch:
diff -r 2f022a271212b220519305649e6a8490cf4399ff mako/cache.py
--- a/mako/cache.py Tue Feb 21 09:49:40 2012 -0500
+++ b/mako/cache.py Wed Mar 07 15:24:22 2012 -0500
@@ -85,6 +85,17 @@
creation_function,
**self._get_cache_kw(kw))
+ def _ctx_get_or_create(self, key, creation_function, context, **kw):
+ """Retrieve a value from the cache, using the given creation function
+ to generate a new value."""
+
+ if not self.template.cache_enabled:
+ return creation_function()
+
+ return self.impl.get_or_create(key,
+ creation_function,
+ **self._get_cache_kw(kw, context))
+
def set(self, key, value, **kw):
"""Place a value in the cache.
@@ -151,18 +162,31 @@
self.invalidate(name, __M_defname=name)
- def _get_cache_kw(self, kw):
+ def _get_cache_kw(self, kw, context=None):
+ if context:
+ ctx_args = self.impl.get_template_arguments(context)
+ else:
+ ctx_args = None
defname = kw.pop('__M_defname', None)
if not defname:
tmpl_kw = self.template.cache_args.copy()
tmpl_kw.update(kw)
+ if ctx_args:
+ tmpl_kw.update(ctx_args)
return tmpl_kw
elif defname in self._def_regions:
- return self._def_regions[defname]
+ tmpl_kw = self._def_regions[defname]
+ if ctx_args:
+ tmpl_kw = tmpl_kw.copy()
+ tmpl_kw.update(ctx_args)
+ return tmpl_kw
else:
tmpl_kw = self.template.cache_args.copy()
tmpl_kw.update(kw)
self._def_regions[defname] = tmpl_kw
+ if ctx_args:
+ tmpl_kw = tmpl_kw.copy()
+ tmpl_kw.update(ctx_args)
return tmpl_kw
class CacheImpl(object):
@@ -171,6 +195,9 @@
def __init__(self, cache):
self.cache = cache
+ def get_template_arguments(self, context):
+ return {}
+
def get_or_create(self, key, creation_function, **kw):
"""Retrieve a value from the cache, using the given creation function
to generate a new value.
diff -r 2f022a271212b220519305649e6a8490cf4399ff mako/codegen.py
--- a/mako/codegen.py Tue Feb 21 09:49:40 2012 -0500
+++ b/mako/codegen.py Wed Mar 07 15:24:22 2012 -0500
@@ -633,7 +633,7 @@
)
if buffered:
s = "context.get('local')."\
- "cache.get_or_create(%s, lambda:__M_%s(%s), %s__M_defname=%r)" % \
+ "cache._ctx_get_or_create(%s, lambda:__M_%s(%s), context, %s__M_defname=%r)" % \
(cachekey, name, ','.join(pass_args),
''.join(["%s=%s, " % (k,v) for k, v in cache_args.items()]),
name
@@ -644,7 +644,7 @@
else:
self.printer.writelines(
"__M_writer(context.get('local')."
- "cache.get_or_create(%s, lambda:__M_%s(%s), %s__M_defname=%r))" %
+ "cache._ctx_get_or_create(%s, lambda:__M_%s(%s), context, %s__M_defname=%r))" %
(cachekey, name, ','.join(pass_args),
''.join(["%s=%s, " % (k,v) for k, v in cache_args.items()]),
name,