def _load_template(self, name, globals):
if self.loader is None:
raise TypeError('no loader for this environment specified')
- try:
- # use abs path for cache key
- cache_key = self.loader.get_source(self, name)[1]
- except RuntimeError:
- # if loader does not implement get_source()
- cache_key = None
- # if template is not file, use name for cache key
- if cache_key is None:
- cache_key = name
+ cache_key = (id(self.loader), name)
if self.cache is not None:
template = self.cache.get(cache_key)
if template is not None and (not self.auto_reload or
assert tmpl is not env.get_template('template')
changed = False
- env = Environment(loader=TestLoader(), cache_size=0)
- assert env.get_template('template') \
- is not env.get_template('template')
-
- env = Environment(loader=TestLoader(), cache_size=2)
+ def test_no_cache(self):
+ mapping = {'foo': 'one'}
+ env = Environment(loader=loaders.DictLoader(mapping), cache_size=0)
+ assert env.get_template('foo') is not env.get_template('foo')
+
+ def test_limited_size_cache(self):
+ mapping = {'one': 'foo', 'two': 'bar', 'three': 'baz'}
+ loader = loaders.DictLoader(mapping)
+ env = Environment(loader=loader, cache_size=2)
t1 = env.get_template('one')
t2 = env.get_template('two')
assert t2 is env.get_template('two')
assert t1 is env.get_template('one')
t3 = env.get_template('three')
- assert 'one' in env.cache
- assert 'two' not in env.cache
- assert 'three' in env.cache
+ assert (id(loader), 'one') in env.cache
+ assert (id(loader), 'two') not in env.cache
+ assert (id(loader), 'three') in env.cache
+
+ def test_cache_loader_change(self):
+ loader1 = loaders.DictLoader({'foo': 'one'})
+ loader2 = loaders.DictLoader({'foo': 'two'})
+ env = Environment(loader=loader1, cache_size=2)
+ assert env.get_template('foo').render() == 'one'
+ env.loader = loader2
+ assert env.get_template('foo').render() == 'two'
def test_dict_loader_cache_invalidates(self):
mapping = {'foo': "one"}