-
Notifications
You must be signed in to change notification settings - Fork 235
/
util.py
56 lines (45 loc) · 1.68 KB
/
util.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from functools import partial
from jinja2 import Environment
from jinja2 import FileSystemLoader
from jinja2 import select_autoescape
try:
from ansi2html import Ansi2HTMLConverter, style
converter = Ansi2HTMLConverter(inline=False, escaped=False)
_handle_ansi = partial(converter.convert, full=False)
_ansi_styles = style.get_styles()
except ImportError:
from _pytest.logging import _remove_ansi_escape_sequences
_handle_ansi = _remove_ansi_escape_sequences
_ansi_styles = []
def _read_template(search_paths, template_name="index.jinja2"):
env = Environment(
loader=FileSystemLoader(search_paths),
autoescape=select_autoescape(
enabled_extensions=("jinja2",),
),
)
return env.get_template(template_name)
def _process_css(default_css, extra_css):
with open(default_css, encoding="utf-8") as f:
css = f.read()
# Add user-provided CSS
for path in extra_css:
css += "\n/******************************"
css += "\n * CUSTOM CSS"
css += f"\n * {path}"
css += "\n ******************************/\n\n"
with open(path, encoding="utf-8") as f:
css += f.read()
# ANSI support
if _ansi_styles:
ansi_css = [
"\n/******************************",
" * ANSI2HTML STYLES",
" ******************************/\n",
]
ansi_css.extend([str(r) for r in _ansi_styles])
css += "\n".join(ansi_css)
return css