From 538320093018ae68a9d20692386ace52a5b7c9b8 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Fri, 17 May 2024 23:42:03 +0200 Subject: [PATCH 1/2] Fix logging crash when log format is `%(check_#ALL)s` --- reframe/core/logging.py | 4 ++-- unittests/test_policies.py | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/reframe/core/logging.py b/reframe/core/logging.py index 0bce2bbd5b..794dff57dc 100644 --- a/reframe/core/logging.py +++ b/reframe/core/logging.py @@ -301,8 +301,8 @@ class CheckFieldFormatter(logging.Formatter): # NOTE: This formatter will work only for the '%' style def __init__(self, fmt=None, datefmt=None, perffmt=None, ignore_keys=None, style='%'): - super().__init__(fmt, datefmt, style) - + super().__init__(fmt, datefmt, style, + validate=(fmt != '%(check_#ALL)s')) self.__fmt = fmt self.__fmtperf = perffmt[:-1] if perffmt else '' self.__specs = re.findall(r'\%\((\S+?)\)s', fmt) diff --git a/unittests/test_policies.py b/unittests/test_policies.py index 885973ca8d..e809acff16 100644 --- a/unittests/test_policies.py +++ b/unittests/test_policies.py @@ -1345,9 +1345,14 @@ def test_perf_logging_lazy(make_runner, make_exec_ctx, lazy_perf_test, assert os.path.exists(logfile) +@pytest.fixture(params=['%(check_result)s|%(check_#ALL)s', '%(check_#ALL)s']) +def perflog_fmt(request): + return request.param + + def test_perf_logging_all_attrs(make_runner, make_exec_ctx, perf_test, - config_perflog, tmp_path): - make_exec_ctx(config_perflog(fmt='%(check_result)s|%(check_#ALL)s')) + config_perflog, tmp_path, perflog_fmt): + make_exec_ctx(config_perflog(fmt=perflog_fmt)) logging.configure_logging(rt.runtime().site_config) runner = make_runner() testcases = executors.generate_testcases([perf_test]) @@ -1359,7 +1364,8 @@ def test_perf_logging_all_attrs(make_runner, make_exec_ctx, perf_test, header = fp.readline() loggable_attrs = type(perf_test).loggable_attrs() - assert len(header.split('|')) == len(loggable_attrs) + 1 + assert (len(header.split('|')) == + len(loggable_attrs) + (perflog_fmt != '%(check_#ALL)s')) def test_perf_logging_custom_vars(make_runner, make_exec_ctx, From 93e82951dcba559bf9151a3c7f2a1b75e2831547 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Wed, 22 May 2024 22:52:12 +0200 Subject: [PATCH 2/2] Remove `validate` argument for Python <= 3.7 --- reframe/core/logging.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reframe/core/logging.py b/reframe/core/logging.py index 794dff57dc..4a510b26a4 100644 --- a/reframe/core/logging.py +++ b/reframe/core/logging.py @@ -301,8 +301,12 @@ class CheckFieldFormatter(logging.Formatter): # NOTE: This formatter will work only for the '%' style def __init__(self, fmt=None, datefmt=None, perffmt=None, ignore_keys=None, style='%'): - super().__init__(fmt, datefmt, style, - validate=(fmt != '%(check_#ALL)s')) + if sys.version_info[:2] <= (3, 7): + super().__init__(fmt, datefmt, style) + else: + super().__init__(fmt, datefmt, style, + validate=(fmt != '%(check_#ALL)s')) + self.__fmt = fmt self.__fmtperf = perffmt[:-1] if perffmt else '' self.__specs = re.findall(r'\%\((\S+?)\)s', fmt)