1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-24 06:59:52 +01:00

jinja template: use shared template in J2Template, init on first use

This commit is contained in:
Ilya Kreymer 2015-04-03 10:42:47 -07:00
parent 4a85869427
commit f9bd2ba55a
3 changed files with 19 additions and 11 deletions

View File

@ -125,8 +125,6 @@ def create_cdx_server_app(passed_config):
dir_loader = colls_loader_cls(config, static_routes) dir_loader = colls_loader_cls(config, static_routes)
collections.update(dir_loader()) collections.update(dir_loader())
config['jinja_env'] = J2TemplateView.init_env(config.get('jinja_env'))
routes = [] routes = []
for name, value in collections.iteritems(): for name, value in collections.iteritems():
@ -272,8 +270,8 @@ def create_wb_router(passed_config=None):
handler_dict = {} handler_dict = {}
# setup template globals # setup template globals
config['jinja_env'] = J2TemplateView.init_env(config.get('jinja_env')) jinja_env = J2TemplateView.init_shared_env()
config['jinja_env'].globals.update(config.get('template_globals', {})) jinja_env.globals.update(config.get('template_globals', {}))
for name, value in collections.iteritems(): for name, value in collections.iteritems():
if isinstance(value, BaseHandler): if isinstance(value, BaseHandler):

View File

@ -74,22 +74,28 @@ class FileOnlyPackageLoader(PackageLoader):
#================================================================= #=================================================================
class J2TemplateView(object): class J2TemplateView(object):
def __init__(self, filename, jinja_env): shared_jinja_env = None
def __init__(self, filename):
self.template_file = filename self.template_file = filename
self.jinja_env = jinja_env self.jinja_env = self.init_shared_env()
@staticmethod @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 = [] loaders = []
J2TemplateView._add_loaders(loaders, packages) J2TemplateView._add_loaders(loaders, packages)
loader = ChoiceLoader(loaders) loader = ChoiceLoader(loaders)
if jinja_env: if overlay_env:
jinja_env = jinja_env.overlay(loader=loader, trim_blocks=True) jinja_env = overlay_env.overlay(loader=loader, trim_blocks=True)
else: else:
jinja_env = Environment(loader=loader, trim_blocks=True) jinja_env = Environment(loader=loader, trim_blocks=True)
jinja_env.filters.update(FILTERS) jinja_env.filters.update(FILTERS)
J2TemplateView.shared_jinja_env = jinja_env
return jinja_env return jinja_env
@staticmethod @staticmethod
@ -126,7 +132,7 @@ def init_view(config, key, view_class=J2TemplateView):
return None return None
logging.debug('Adding {0}: {1}'.format(key, filename)) 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: if html:
banner_html = config.get('banner_html', 'banner.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}'. logging.debug('Adding HeadInsert: {0}, Banner {1}'.
format(html, banner_html)) format(html, banner_html))

View File

@ -19,6 +19,7 @@ from pywb.warc.cdxindexer import main as cdxindexer_main
from pywb import get_test_dir from pywb import get_test_dir
from pywb.framework.wsgi_wrappers import init_app from pywb.framework.wsgi_wrappers import init_app
from pywb.webapp.views import J2TemplateView
from pytest import raises from pytest import raises
from mock import patch from mock import patch
@ -72,6 +73,9 @@ class TestManagedColls(object):
def _get_sample_warc(self, name): def _get_sample_warc(self, name):
return os.path.join(get_test_dir(), 'warcs', 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) @patch('waitress.serve', lambda *args, **kwargs: None)
def test_run_cli(self): def test_run_cli(self):
""" test new wayback cli interface """ test new wayback cli interface