def test_get_source(self, fs_loader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock() fs_loader().get_source.return_value = "fs_load" # override exists output = ppl.get_source("env", "allura.ext.admin:templates/audit.html") assert_equal(output, "fs_load") fs_loader().get_source.assert_called_once_with("env", "override/allura/ext/admin/templates/audit.html") fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [jinja2.TemplateNotFound("test"), "fs_load"] with mock.patch("pkg_resources.resource_filename") as rf: rf.return_value = "resource" # no override, ':' in template output = ppl.get_source("env", "allura.ext.admin:templates/audit.html") rf.assert_called_once_with("allura.ext.admin", "templates/audit.html") assert_equal(output, "fs_load") assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with("env", "resource") fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [jinja2.TemplateNotFound("test"), "fs_load"] # no override, ':' not in template output = ppl.get_source("env", "templates/audit.html") assert_equal(output, "fs_load") assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with("env", "templates/audit.html")
def test_replace_signposts(self): ppl = PackagePathLoader() ppl._replace_signpost = mock.Mock() paths = [["site-theme", None], ["ep0", "/ep0"], ["ep1", "/ep1"], ["ep2", "/ep2"], ["allura", "/"]] rules = {"allura": "ep2", "site-theme": "ep1", "foo": "ep1", "ep0": "bar"} ppl._replace_signposts(paths, rules) assert_equal(paths, [["site-theme", "/ep1"], ["ep0", "/ep0"], ["allura", "/ep2"]])
def test_fs_loader(self, FileSystemLoader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock(return_value=['path1', 'path2']) FileSystemLoader.return_value = 'fs_loader' output1 = ppl.fs_loader output2 = ppl.fs_loader ppl.init_paths.assert_called_once_with() FileSystemLoader.assert_called_once_with(['path1', 'path2']) assert_equal(output1, 'fs_loader') assert output1 is output2
def test_fs_loader(self, FileSystemLoader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock(return_value=["path1", "path2"]) FileSystemLoader.return_value = "fs_loader" output1 = ppl.fs_loader output2 = ppl.fs_loader ppl.init_paths.assert_called_once_with() FileSystemLoader.assert_called_once_with(["path1", "path2"]) assert_equal(output1, "fs_loader") assert output1 is output2
def test_override_disable(self, fs_loader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock() fs_loader().get_source.side_effect = jinja2.TemplateNotFound('test') assert_raises(jinja2.TemplateError, ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html') assert_equal(fs_loader().get_source.call_count, 1) fs_loader().get_source.reset_mock() with mock.patch.dict(config, {'disable_template_overrides': False}): assert_raises(jinja2.TemplateError, ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html') assert_equal(fs_loader().get_source.call_count, 2)
def test_load_paths(self, iter_entry_points, resource_filename): eps = iter_entry_points.return_value.__iter__.return_value = [ mock.Mock(ep_name='ep0', module_name='eps.ep0'), mock.Mock(ep_name='ep1', module_name='eps.ep1'), mock.Mock(ep_name='ep2', module_name='eps.ep2'), ] for ep in eps: ep.name = ep.ep_name resource_filename.side_effect = lambda m, r: 'path:' + m paths = PackagePathLoader()._load_paths() assert_equal(paths, [ ['site-theme', None], ['ep0', 'path:eps.ep0'], ['ep1', 'path:eps.ep1'], ['ep2', 'path:eps.ep2'], ['allura', '/'], ]) assert_equal(type(paths[0]), list) assert_equal(resource_filename.call_args_list, [ mock.call('eps.ep0', ''), mock.call('eps.ep1', ''), mock.call('eps.ep2', ''), ])
def test_sort_paths(self): paths = [ ['site-theme', None], ['ep0', '/ep0'], ['ep1', '/ep1'], ['ep2', '/ep2'], ['ep3', '/ep3'], ['allura', '/'], ] rules = [ ('allura', 'ep0'), ('ep3', 'ep1'), ('ep2', 'ep1'), ('ep4', 'ep1'), # rules referencing missing paths ('ep2', 'ep5'), ] PackagePathLoader()._sort_paths(paths, rules) assert_equal(paths, [ ['site-theme', None], ['ep2', '/ep2'], ['ep3', '/ep3'], ['ep1', '/ep1'], ['allura', '/'], ['ep0', '/ep0'], ])
def test_override_disable(self, fs_loader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock() fs_loader().get_source.side_effect = jinja2.TemplateNotFound('test') assert_raises( jinja2.TemplateError, ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html') assert_equal(fs_loader().get_source.call_count, 1) fs_loader().get_source.reset_mock() with mock.patch.dict(config, {'disable_template_overrides': False}): assert_raises( jinja2.TemplateError, ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html') assert_equal(fs_loader().get_source.call_count, 2)
def test_load_rules(self, iter_entry_points): eps = iter_entry_points.return_value.__iter__.return_value = [ mock.Mock(ep_name='ep0', rules=[('>', 'allura')]), mock.Mock(ep_name='ep1', rules=[('=', 'allura')]), mock.Mock(ep_name='ep2', rules=[('<', 'allura')]), ] for ep in eps: ep.name = ep.ep_name ep.load.return_value.template_path_rules = ep.rules order_rules, replacement_rules = PackagePathLoader()._load_rules() assert_equal(order_rules, [('ep0', 'allura'), ('allura', 'ep2')]) assert_equal(replacement_rules, {'allura': 'ep1'}) eps = iter_entry_points.return_value.__iter__.return_value = [ mock.Mock(ep_name='ep0', rules=[('?', 'allura')]), ] for ep in eps: ep.name = ep.ep_name ep.load.return_value.template_path_rules = ep.rules assert_raises(jinja2.TemplateError, PackagePathLoader()._load_rules)
def test_get_source(self, fs_loader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock() fs_loader().get_source.return_value = 'fs_load' # override exists output = ppl.get_source('env', 'allura.ext.admin:templates/audit.html') assert_equal(output, 'fs_load') fs_loader().get_source.assert_called_once_with( 'env', 'override/allura/ext/admin/templates/audit.html') fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [ jinja2.TemplateNotFound('test'), 'fs_load'] with mock.patch('pkg_resources.resource_filename') as rf: rf.return_value = 'resource' # no override, ':' in template output = ppl.get_source( 'env', 'allura.ext.admin:templates/audit.html') rf.assert_called_once_with( 'allura.ext.admin', 'templates/audit.html') assert_equal(output, 'fs_load') assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with('env', 'resource') fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [ jinja2.TemplateNotFound('test'), 'fs_load'] # no override, ':' not in template output = ppl.get_source('env', 'templates/audit.html') assert_equal(output, 'fs_load') assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with( 'env', 'templates/audit.html')
def test_replace_signposts(self): ppl = PackagePathLoader() ppl._replace_signpost = mock.Mock() paths = [ ['site-theme', None], ['ep0', '/ep0'], ['ep1', '/ep1'], ['ep2', '/ep2'], ['allura', '/'], ] rules = { 'allura': 'ep2', 'site-theme': 'ep1', 'foo': 'ep1', 'ep0': 'bar', } ppl._replace_signposts(paths, rules) assert_equal(paths, [ ['site-theme', '/ep1'], ['ep0', '/ep0'], ['allura', '/ep2'], ])
def test_replace_signposts(self): ppl = PackagePathLoader() ppl._replace_signpost = mock.Mock() paths = [ ['site-theme', None], ['ep0', '/ep0'], ['ep1', '/ep1'], ['ep2', '/ep2'], ['allura', '/'], ] rules = OrderedDict([ ('allura', 'ep2'), ('site-theme', 'ep1'), ('foo', 'ep1'), ('ep0', 'bar'), ]) ppl._replace_signposts(paths, rules) assert_equal(paths, [ ['site-theme', '/ep1'], ['ep0', '/ep0'], ['allura', '/ep2'], ])
def setup_jinja_renderer(self): bcc = self._setup_bytecode_cache() jinja2_env = jinja2.Environment( loader=PackagePathLoader(), auto_reload=config.auto_reload_templates, autoescape=True, bytecode_cache=bcc, extensions=['jinja2.ext.do', 'jinja2.ext.i18n']) jinja2_env.install_gettext_translations(pylons.i18n) jinja2_env.filters['filesizeformat'] = helpers.do_filesizeformat jinja2_env.filters['datetimeformat'] = helpers.datetimeformat jinja2_env.globals.update({'hasattr': hasattr}) config['pylons.app_globals'].jinja2_env = jinja2_env # Jinja's unable to request c's attributes without strict_c config['pylons.strict_c'] = True self.render_functions.jinja = tg.render.render_jinja
def create(cls, config, app_globals): # this has evolved over the age of allura, and upgrades of TG # the parent JinjaRenderer logic is different, some may be better and hasn't been incorporated into ours yet bcc = cls._setup_bytecode_cache() jinja2_env = jinja2.Environment( loader=PackagePathLoader(), auto_reload=config['auto_reload_templates'], autoescape=True, bytecode_cache=bcc, cache_size=asint(config.get('jinja_cache_size', -1)), extensions=['jinja2.ext.do', 'jinja2.ext.i18n']) jinja2_env.install_gettext_translations(tg.i18n) jinja2_env.filters['datetimeformat'] = helpers.datetimeformat jinja2_env.filters['filter'] = lambda s, t=None: list(filter(t and jinja2_env.tests[t], s)) jinja2_env.filters['nl2br'] = helpers.nl2br_jinja_filter jinja2_env.globals.update({'hasattr': hasattr}) config['tg.app_globals'].jinja2_env = jinja2_env # TG doesn't need this, but we use g.jinja2_env a lot return {'jinja': cls(jinja2_env)}
def test_init_paths(self): paths = [["root", "/"], ["none", None], ["tail", "/tail"]] ppl = PackagePathLoader() ppl._load_paths = mock.Mock(return_value=paths) ppl._load_rules = mock.Mock(return_value=("order_rules", "repl_rules")) ppl._replace_signposts = mock.Mock() ppl._sort_paths = mock.Mock() output = ppl.init_paths() ppl._load_paths.assert_called_once_with() ppl._load_rules.assert_called_once_with() ppl._sort_paths.assert_called_once_with(paths, "order_rules") ppl._replace_signposts.assert_called_once_with(paths, "repl_rules") assert_equal(output, ["/", "/tail"])
def test_init_paths(self): paths = [ ['root', '/'], ['none', None], ['tail', '/tail'], ] ppl = PackagePathLoader() ppl._load_paths = mock.Mock(return_value=paths) ppl._load_rules = mock.Mock(return_value=('order_rules', 'repl_rules')) ppl._replace_signposts = mock.Mock() ppl._sort_paths = mock.Mock() output = ppl.init_paths() ppl._load_paths.assert_called_once_with() ppl._load_rules.assert_called_once_with() ppl._sort_paths.assert_called_once_with(paths, 'order_rules') ppl._replace_signposts.assert_called_once_with(paths, 'repl_rules') assert_equal(output, ['/', '/tail'])
def test_get_source(self, fs_loader): ppl = PackagePathLoader() ppl.init_paths = mock.Mock() fs_loader().get_source.return_value = 'fs_load' # override exists output = ppl.get_source('env', 'allura.ext.admin:templates/audit.html') assert_equal(output, 'fs_load') fs_loader().get_source.assert_called_once_with( 'env', 'override/allura/ext/admin/templates/audit.html') fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [ jinja2.TemplateNotFound('test'), 'fs_load' ] with mock.patch('pkg_resources.resource_filename') as rf: rf.return_value = 'resource' # no override, ':' in template output = ppl.get_source('env', 'allura.ext.admin:templates/audit.html') rf.assert_called_once_with('allura.ext.admin', 'templates/audit.html') assert_equal(output, 'fs_load') assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with('env', 'resource') fs_loader().get_source.reset_mock() fs_loader().get_source.side_effect = [ jinja2.TemplateNotFound('test'), 'fs_load' ] # no override, ':' not in template output = ppl.get_source('env', 'templates/audit.html') assert_equal(output, 'fs_load') assert_equal(fs_loader().get_source.call_count, 2) fs_loader().get_source.assert_called_with('env', 'templates/audit.html')