1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +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)
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):

View File

@ -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))

View File

@ -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