mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
urlrewrite: webassets: add webassets support to JinjaEnv, if 'assets_path' is set, the specified webassets yaml file is added to the env
This commit is contained in:
parent
003d84c371
commit
3d507c5d68
@ -9,7 +9,7 @@ RUN pip install git+https://github.com/ikreymer/pywb.git@develop#egg=pywb-0.32.2
|
|||||||
|
|
||||||
RUN pip install git+https://github.com/t0m/pyamf.git@python3
|
RUN pip install git+https://github.com/t0m/pyamf.git@python3
|
||||||
|
|
||||||
RUN pip install boto
|
RUN pip install boto webassets
|
||||||
|
|
||||||
ADD . /webrecore/
|
ADD . /webrecore/
|
||||||
WORKDIR /webrecore/
|
WORKDIR /webrecore/
|
||||||
|
@ -5,6 +5,12 @@ from six.moves.urllib.parse import urlsplit
|
|||||||
from jinja2 import Environment
|
from jinja2 import Environment
|
||||||
from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader
|
from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader
|
||||||
|
|
||||||
|
from webassets.ext.jinja2 import AssetsExtension
|
||||||
|
from webassets.loaders import YAMLLoader
|
||||||
|
from webassets.env import Resolver
|
||||||
|
|
||||||
|
from pkg_resources import resource_filename
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -27,6 +33,7 @@ class RelEnvironment(Environment):
|
|||||||
class JinjaEnv(object):
|
class JinjaEnv(object):
|
||||||
def __init__(self, paths=['templates', '.', '/'],
|
def __init__(self, paths=['templates', '.', '/'],
|
||||||
packages=['pywb'],
|
packages=['pywb'],
|
||||||
|
assets_path=None,
|
||||||
globals=None,
|
globals=None,
|
||||||
overlay=None,
|
overlay=None,
|
||||||
extensions=None):
|
extensions=None):
|
||||||
@ -35,7 +42,10 @@ class JinjaEnv(object):
|
|||||||
|
|
||||||
loader = ChoiceLoader(self._make_loaders(paths, packages))
|
loader = ChoiceLoader(self._make_loaders(paths, packages))
|
||||||
|
|
||||||
extensions = extensions or {}
|
extensions = extensions or []
|
||||||
|
|
||||||
|
if assets_path:
|
||||||
|
extensions.append(AssetsExtension)
|
||||||
|
|
||||||
if overlay:
|
if overlay:
|
||||||
jinja_env = overlay.jinja_env.overlay(loader=loader,
|
jinja_env = overlay.jinja_env.overlay(loader=loader,
|
||||||
@ -47,10 +57,19 @@ class JinjaEnv(object):
|
|||||||
extensions=extensions)
|
extensions=extensions)
|
||||||
|
|
||||||
jinja_env.filters.update(self.filters)
|
jinja_env.filters.update(self.filters)
|
||||||
|
|
||||||
if globals:
|
if globals:
|
||||||
jinja_env.globals.update(globals)
|
jinja_env.globals.update(globals)
|
||||||
|
|
||||||
self.jinja_env = jinja_env
|
self.jinja_env = jinja_env
|
||||||
|
|
||||||
|
# init assets
|
||||||
|
if assets_path:
|
||||||
|
assets_loader = YAMLLoader(assets_path)
|
||||||
|
assets_env = assets_loader.load_environment()
|
||||||
|
assets_env.resolver = PkgResResolver()
|
||||||
|
jinja_env.assets_environment = assets_env
|
||||||
|
|
||||||
def _make_loaders(self, paths, packages):
|
def _make_loaders(self, paths, packages):
|
||||||
loaders = []
|
loaders = []
|
||||||
# add loaders for paths
|
# add loaders for paths
|
||||||
@ -182,3 +201,25 @@ class TopFrameView(BaseInsertView):
|
|||||||
return self.render_to_string(env, **params)
|
return self.render_to_string(env, **params)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
class PkgResResolver(Resolver):
|
||||||
|
def get_pkg_path(self, item):
|
||||||
|
if not isinstance(item, str):
|
||||||
|
return None
|
||||||
|
|
||||||
|
parts = urlsplit(item)
|
||||||
|
if parts.scheme == 'pkg' and parts.netloc:
|
||||||
|
return (parts.netloc, parts.path)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def resolve_source(self, ctx, item):
|
||||||
|
pkg = self.get_pkg_path(item)
|
||||||
|
if pkg:
|
||||||
|
filename = resource_filename(pkg[0], pkg[1])
|
||||||
|
if filename:
|
||||||
|
return filename
|
||||||
|
|
||||||
|
return super(PkgResResolver, self).resolve_source(ctx, item)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user