Newer
Older
from mako.lookup import TemplateLookup
Mike Bayer
committed
from mako import lookup
import unittest, os
Mike Bayer
committed
if not os.access('./test_htdocs', os.F_OK):
os.mkdir('./test_htdocs')
class MockCache(object):
def __init__(self, realcache):
self.realcache = realcache
def get(self, key, **kwargs):
self.key = key
self.kwargs = kwargs.copy()
self.kwargs.pop('createfunc', None)
return self.realcache.get(key, **kwargs)
t = Template("""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
Mike Bayer
committed
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
Mike Bayer
committed
assert m.kwargs == {}
def test_nested_def(self):
t = Template("""
<%!
callcount = [0]
%>
<%def name="foo()">
<%def name="bar()" cached="True">
this is foo
<%
callcount[0] += 1
%>
</%def>
${bar()}
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {}
def test_page(self):
t = Template("""
<%!
callcount = [0]
%>
<%page cached="True"/>
this is foo
<%
callcount[0] += 1
%>
callcount: ${callcount}
""")
Mike Bayer
committed
m = self._install_mock_cache(t)
t.render()
t.render()
assert result_lines(t.render()) == [
"this is foo",
"callcount: [1]"
]
Mike Bayer
committed
assert m.kwargs == {}
def test_dynamic_key_with_imports(self):
lookup = TemplateLookup()
lookup.put_string("foo.html", """
<%!
callcount = [0]
%>
<%namespace file="ns.html" import="*"/>
<%page cached="True" cache_key="${foo}"/>
this is foo
<%
callcount[0] += 1
%>
callcount: ${callcount}
""")
lookup.put_string("ns.html", """""")
t = lookup.get_template("foo.html")
m = self._install_mock_cache(t)
t.render(foo='somekey')
t.render(foo='somekey')
assert result_lines(t.render(foo='somekey')) == [
"this is foo",
"callcount: [1]"
]
assert m.kwargs == {}
Mike Bayer
committed
def test_fileargs_implicit(self):
l = lookup.TemplateLookup(module_directory='./test_htdocs')
l.put_string("test","""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True" cache_type='dbm'>
Mike Bayer
committed
this is foo
<%
callcount[0] += 1
%>
</%def>
Mike Bayer
committed
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(l.get_template('test'))
assert result_lines(l.get_template('test').render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'type':'dbm', 'data_dir':'./test_htdocs'}
Mike Bayer
committed
def test_fileargs_deftag(self):
t = Template("""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True" cache_type='file' cache_dir='./test_htdocs'>
Mike Bayer
committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'type':'file','data_dir':'./test_htdocs'}
def test_fileargs_pagetag(self):
t = Template("""
<%page cache_dir='./test_htdocs' cache_type='dbm'/>
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
Mike Bayer
committed
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'dbm'}
def test_args_complete(self):
t = Template("""
<%def name="foo()" cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'>
this is foo
</%def>
${foo()}
""")
m = self._install_mock_cache(t)
t.render()
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'expiretime':30}
t2 = Template("""
<%page cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'/>
hi
""")
m = self._install_mock_cache(t2)
t2.render()
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'expiretime':30}
Mike Bayer
committed
def test_fileargs_lookup(self):
l = lookup.TemplateLookup(cache_dir='./test_htdocs', cache_type='file')
l.put_string("test","""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
Mike Bayer
committed
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
t = l.get_template('test')
m = self._install_mock_cache(t)
assert result_lines(l.get_template('test').render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
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"]
Mike Bayer
committed
def _install_mock_cache(self, template):
m = MockCache(template.module._template_cache)
template.module._template_cache = m
return m