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:
parent
4a85869427
commit
f9bd2ba55a
@ -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):
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user