1from __future__ import annotations
2
3import datetime
4import html
5import os.path
6
7from jinja2 import Environment, FileSystemLoader, Template
8from jinja2.exceptions import TemplateNotFound
9
10from dask.utils import format_bytes, format_time, format_time_ago, key_split, typename
11
12FILTERS = {
13 "datetime_from_timestamp": datetime.datetime.fromtimestamp,
14 "format_bytes": format_bytes,
15 "format_time": format_time,
16 "format_time_ago": format_time_ago,
17 "html_escape": html.escape,
18 "key_split": key_split,
19 "type": type,
20 "typename": typename,
21}
22
23TEMPLATE_PATHS = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates")]
24
25
26def get_environment() -> Environment:
27 loader = FileSystemLoader(TEMPLATE_PATHS)
28 environment = Environment(loader=loader)
29 environment.filters.update(FILTERS)
30
31 return environment
32
33
34def get_template(name: str) -> Template:
35 try:
36 return get_environment().get_template(name)
37 except TemplateNotFound as e:
38 raise TemplateNotFound(
39 f"Unable to find {name} in dask.widgets.TEMPLATE_PATHS {TEMPLATE_PATHS}"
40 ) from e