From f9bd2ba55a112a8e2fe0f37efefea73f34acc95d Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Fri, 3 Apr 2015 10:42:47 -0700 Subject: [PATCH] jinja template: use shared template in J2Template, init on first use --- pywb/webapp/pywb_init.py | 6 ++---- pywb/webapp/views.py | 20 +++++++++++++------- tests/test_auto_colls.py | 4 ++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/pywb/webapp/pywb_init.py b/pywb/webapp/pywb_init.py index 8b82d66a..6dc34507 100644 --- a/pywb/webapp/pywb_init.py +++ b/pywb/webapp/pywb_init.py @@ -125,8 +125,6 @@ def create_cdx_server_app(passed_config): dir_loader = colls_loader_cls(config, static_routes) collections.update(dir_loader()) - config['jinja_env'] = J2TemplateView.init_env(config.get('jinja_env')) - routes = [] for name, value in collections.iteritems(): @@ -272,8 +270,8 @@ def create_wb_router(passed_config=None): handler_dict = {} # setup template globals - config['jinja_env'] = J2TemplateView.init_env(config.get('jinja_env')) - config['jinja_env'].globals.update(config.get('template_globals', {})) + jinja_env = J2TemplateView.init_shared_env() + jinja_env.globals.update(config.get('template_globals', {})) for name, value in collections.iteritems(): if isinstance(value, BaseHandler): diff --git a/pywb/webapp/views.py b/pywb/webapp/views.py index c289ad9a..fe0655bc 100644 --- a/pywb/webapp/views.py +++ b/pywb/webapp/views.py @@ -74,22 +74,28 @@ class FileOnlyPackageLoader(PackageLoader): #================================================================= class J2TemplateView(object): - def __init__(self, filename, jinja_env): + shared_jinja_env = None + + def __init__(self, filename): self.template_file = filename - self.jinja_env = jinja_env + self.jinja_env = self.init_shared_env() @staticmethod - def init_env(jinja_env=None, packages=['pywb']): + def init_shared_env(overlay_env=None, packages=['pywb']): + if J2TemplateView.shared_jinja_env: + return J2TemplateView.shared_jinja_env + loaders = [] J2TemplateView._add_loaders(loaders, packages) loader = ChoiceLoader(loaders) - if jinja_env: - jinja_env = jinja_env.overlay(loader=loader, trim_blocks=True) + if overlay_env: + jinja_env = overlay_env.overlay(loader=loader, trim_blocks=True) else: jinja_env = Environment(loader=loader, trim_blocks=True) jinja_env.filters.update(FILTERS) + J2TemplateView.shared_jinja_env = jinja_env return jinja_env @staticmethod @@ -126,7 +132,7 @@ def init_view(config, key, view_class=J2TemplateView): return None logging.debug('Adding {0}: {1}'.format(key, filename)) - return view_class(filename, config['jinja_env']) + return view_class(filename) #================================================================= @@ -160,7 +166,7 @@ class HeadInsertView(J2TemplateView): if html: banner_html = config.get('banner_html', 'banner.html') - view = HeadInsertView(html, config['jinja_env']) + view = HeadInsertView(html) logging.debug('Adding HeadInsert: {0}, Banner {1}'. format(html, banner_html)) diff --git a/tests/test_auto_colls.py b/tests/test_auto_colls.py index 46de3823..c9e8dd4b 100644 --- a/tests/test_auto_colls.py +++ b/tests/test_auto_colls.py @@ -19,6 +19,7 @@ from pywb.warc.cdxindexer import main as cdxindexer_main from pywb import get_test_dir from pywb.framework.wsgi_wrappers import init_app +from pywb.webapp.views import J2TemplateView from pytest import raises from mock import patch @@ -72,6 +73,9 @@ class TestManagedColls(object): def _get_sample_warc(self, name): return os.path.join(get_test_dir(), 'warcs', name) + def teardown(self): + J2TemplateView.shared_jinja_env = None + @patch('waitress.serve', lambda *args, **kwargs: None) def test_run_cli(self): """ test new wayback cli interface