1from __future__
import annotations
10logger = logging.getLogger(__name__)
13@pytest.fixture(scope='session')
14def service_logfile_path(
16 service_tmpdir: pathlib.Path,
17) -> pathlib.Path |
None:
19 Holds optional service logfile path. You may want to override this
22 By default returns value of --service-logs-file option or creates
25 if pytestconfig.option.service_logs_file:
26 return pytestconfig.option.service_logs_file
27 return service_tmpdir /
'service.log'
30@pytest.fixture(scope='session')
31def _service_logfile_path(
32 userver_register_logfile,
33 service_logfile_path: pathlib.Path |
None,
34) -> pathlib.Path |
None:
35 if not service_logfile_path:
37 userver_register_logfile(
42 return service_logfile_path
45@pytest.fixture(scope='session')
46def userver_register_logfile(servicelogs_register_logfile, _userver_log_formatter_factory):
48 Register logfile. Registered logfile is monitored in case of test failure
49 and its contents is attached to pytest report.
51 :param path: pathlib.Path corresponding to log file
52 :param title: title to be used in pytest report
53 :param truncate: file is truncated if True
57 path: pathlib.Path, *, title: str, truncate: bool = False,
62 def do_truncate(path):
63 with path.open(
'wb+')
as fp:
70 truncate: bool =
False,
74 servicelogs_register_logfile(
77 formatter_factory=_userver_log_formatter_factory,
81 return register_logfile
84@pytest.fixture(scope='session')
85def _userver_log_formatter_factory(pytestconfig, testsuite_colors_enabled):
86 def colorizer_factory():
87 verbose = pytestconfig.option.service_logs_pretty ==
'verbose'
88 colorizer = colorize.Colorizer(
90 colors_enabled=testsuite_colors_enabled,
93 def format_line(rawline):
94 line = rawline.decode(encoding=
'utf-8', errors=
'backslashreplace')
95 if not line.startswith(
'tskv\t'):
97 return colorizer.colorize_line(line)
101 def default_factory():
102 def format_line(rawline):
103 return rawline.decode(encoding=
'utf-8', errors=
'backslashreplace')
107 if pytestconfig.option.service_logs_pretty:
108 return colorizer_factory
109 return default_factory