-
Notifications
You must be signed in to change notification settings - Fork 12
/
jinja.py
31 lines (25 loc) · 1.15 KB
/
jinja.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Provide Jinja2 Helpers."""
from jinja2 import BaseLoader, ChoiceLoader, Environment, TemplateNotFound
from pkg_resources import resource_string
from starlette.templating import Jinja2Templates as _Jinja2Templates
class PkgResourcesTemplateLoader(BaseLoader):
"""Load jinja templates via pkg_resources."""
@staticmethod
def get_source(environment: Environment, template: str):
"""Load the template via package resources."""
source = None
if ':' in template:
pkg, resource = template.split(':')
try:
source = resource_string(pkg, resource).decode()
except FileNotFoundError:
pass
if source is None:
raise TemplateNotFound(template)
return source, None, lambda: True
class Jinja2Templates(_Jinja2Templates): # noqa: D101
__doc__ = _Jinja2Templates.__doc__
def __init__(self, *args, **kwargs) -> Environment:
"""Initialise the templates and update the environment."""
super().__init__(*args, **kwargs)
self.env.loader = ChoiceLoader([PkgResourcesTemplateLoader(), self.env.loader]) # type: ignore[list-item]