aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/mako/codegen.py11
-rw-r--r--test/cache.py14
-rw-r--r--test/filters.py6
3 files changed, 25 insertions, 6 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index c2a10d3..52ded80 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -346,8 +346,9 @@ class _GenerateRenderMethod(object):
s = "_buf.getvalue()"
if filtered:
s = self.create_filter_callable(node.filter_args.args, s, False)
- s = self.create_filter_callable(self.compiler.buffer_filters, s, False)
self.printer.writeline(None)
+ if buffered and not cached:
+ s = self.create_filter_callable(self.compiler.buffer_filters, s, False)
if buffered or cached:
self.printer.writeline("return %s" % s)
else:
@@ -384,10 +385,10 @@ class _GenerateRenderMethod(object):
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(%s*args, **kwargs))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg),
- None
- )
+ s = "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)
+ # 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:__%s(%s*args, **kwargs)))" % (cachekey, ''.join(["%s=%s, " % (k,v) for k, v in cacheargs.iteritems()]), name, ctx_arg),
diff --git a/test/cache.py b/test/cache.py
index f6f318f..1542a2c 100644
--- a/test/cache.py
+++ b/test/cache.py
@@ -222,6 +222,20 @@ class CacheTest(unittest.TestCase):
]
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file'}
+ def test_buffered(self):
+ t = Template("""
+ <%!
+ def a(text):
+ return "this is a " + text.strip()
+ %>
+ ${foo()}
+ ${foo()}
+ <%def name="foo()" cached="True" buffered="True">
+ this is a test
+ </%def>
+ """, buffer_filters=["a"])
+ assert result_lines(t.render()) == ["this is a this is a test", "this is a this is a test"]
+
def _install_mock_cache(self, template):
m = MockCache(template.module._template_cache)
template.module._template_cache = m
diff --git a/test/filters.py b/test/filters.py
index aa0eb4e..da7caa9 100644
--- a/test/filters.py
+++ b/test/filters.py
@@ -160,11 +160,15 @@ class FilterTest(unittest.TestCase):
%>
${foo()}
+ ${bar()}
<%def name="foo()" filter="b">
this is text
</%def>
+ <%def name="bar()" filter="b" buffered="True">
+ this is text
+ </%def>
""", buffer_filters=['a'])
- assert flatten_result(t.render()) == "this is a"
+ assert flatten_result(t.render()) == "this is b this is a"
def test_builtins(self):