Skip to content

Commit 16d8962

Browse files
authored
Merge pull request #981 from sgsmob/indicator_runner
Change logging scheme for validation
2 parents f2cbec3 + 2252273 commit 16d8962

File tree

5 files changed

+19
-11
lines changed

5 files changed

+19
-11
lines changed

_delphi_utils_python/delphi_utils/runner.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import importlib
44
from typing import Any, Callable, Dict, Optional
55
from .archive import ArchiveDiffer, archiver_from_params
6+
from .logger import get_structured_logger
67
from .utils import read_params
78
from .validator.validate import Validator
89
from .validator.run import validator_from_params
@@ -40,6 +41,7 @@ def run_indicator_pipeline(indicator_fn: Callable[[Params], None],
4041
archiver = archiver_fn(params)
4142
if validator:
4243
validation_report = validator.validate()
44+
validation_report.log(get_structured_logger(params["common"].get("log_filename", None)))
4345
if archiver and (not validator or validation_report.success()):
4446
archiver.archive()
4547

_delphi_utils_python/delphi_utils/validator/report.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
from ..logger import get_structured_logger
55
from .errors import ValidationFailure
66

7-
logger = get_structured_logger(__name__)
8-
97
class ValidationReport:
108
"""Class for reporting the results of validation."""
119

@@ -83,14 +81,17 @@ def summary(self):
8381
out_str += f"{len(self.raised_warnings)} warnings\n"
8482
return out_str
8583

86-
def log(self):
84+
def log(self, logger=None):
8785
"""Log errors and warnings."""
86+
if logger is None:
87+
logger = get_structured_logger(__name__)
88+
8889
for error in self.unsuppressed_errors:
8990
logger.critical(str(error))
9091
for warning in self.raised_warnings:
9192
logger.warning(str(warning))
9293

93-
def print_and_exit(self, die_on_failures=True):
94+
def print_and_exit(self, logger=None, die_on_failures=True):
9495
"""Print results and exit.
9596
9697
Arguments
@@ -99,7 +100,7 @@ def print_and_exit(self, die_on_failures=True):
99100
Whether to return non-zero status if any failures were encountered.
100101
"""
101102
print(self.summary())
102-
self.log()
103+
self.log(logger)
103104
if self.success():
104105
sys.exit(0)
105106
elif die_on_failures:

_delphi_utils_python/delphi_utils/validator/run.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
when the module is run with `python -m delphi_utils.validator`.
66
"""
77
import argparse as ap
8-
from .. import read_params
8+
from .. import read_params, get_structured_logger
99
from .validate import Validator
1010

1111

@@ -15,8 +15,12 @@ def run_module():
1515
parser.add_argument("--dry_run", action="store_true", help="When provided, return zero exit"
1616
" status irrespective of the number of failures")
1717
args = parser.parse_args()
18-
validator = Validator(read_params())
19-
validator.validate().print_and_exit(not args.dry_run)
18+
params = read_params()
19+
validator = Validator(params)
20+
validator.validate().print_and_exit(
21+
get_structured_logger(__name__,
22+
params["common"].get("log_filename", None),
23+
not args.dry_run))
2024

2125

2226
def validator_from_params(params):

_delphi_utils_python/tests/test_runner.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TestRunIndicator:
3535
"""Fixture for running indicators."""
3636
# arbitrary params to pass to function generators
3737
PARAMS = {
38+
"common": {},
3839
"indicator": {"a": 1},
3940
"validation": {"b": 2},
4041
"archive": {"c": 3}

_delphi_utils_python/tests/validator/test_report.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def test_str(self):
4444
assert report.summary() ==\
4545
"3 checks run\n1 checks failed\n1 checks suppressed\n2 warnings\n"
4646

47-
@mock.patch("delphi_utils.validator.report.logger")
48-
def test_log(self, mock_logger):
47+
def test_log(self):
4948
"""Test that the logs contain all failures and warnings."""
49+
mock_logger = mock.Mock()
5050
report = ValidationReport([self.ERROR_1])
5151
report.increment_total_checks()
5252
report.increment_total_checks()
@@ -56,7 +56,7 @@ def test_log(self, mock_logger):
5656
report.add_raised_error(self.ERROR_1)
5757
report.add_raised_error(self.ERROR_2)
5858

59-
report.log()
59+
report.log(mock_logger)
6060
mock_logger.critical.assert_called_once_with(
6161
"bad failed for sig2 at resolution county on 2020-11-07: msg 2")
6262
mock_logger.warning.assert_has_calls([mock.call("wrong import"), mock.call("right import")])

0 commit comments

Comments
 (0)