diff --git a/semeio/jobs/design_kw/design_kw.py b/semeio/jobs/design_kw/design_kw.py index d0adaf20..aad9f239 100644 --- a/semeio/jobs/design_kw/design_kw.py +++ b/semeio/jobs/design_kw/design_kw.py @@ -1,22 +1,20 @@ # pylint: disable=logging-fstring-interpolation import logging -import shlex import re - +import shlex from typing import List - _STATUS_FILE_NAME = "DESIGN_KW.OK" _logger = logging.getLogger(__name__) def run( - template_file_name, - result_file_name, - log_level, - parameters_file_name="parameters.txt", -): + template_file_name: str, + result_file_name: str, + log_level: int, + parameters_file_name: str = "parameters.txt", +) -> bool: # Get all key, value pairs # If FWL key is having multiple entries in the parameters file # KeyError is raised. This will be logged, and no OK @@ -36,22 +34,23 @@ def run( with open(template_file_name, "r", encoding="utf-8") as template_file: template = template_file.readlines() - if valid: - with open(result_file_name, "w", encoding="utf-8") as result_file: - for line in template: - if not is_comment(line): - for key, value in key_vals.items(): - line = line.replace(f"<{key}>", str(value)) + with open(result_file_name, "w", encoding="utf-8") as result_file: + for line in template: + if not is_comment(line): + for key, value in key_vals.items(): + line = line.replace(f"<{key}>", str(value)) - if not all_matched(line, template_file_name, template): - valid = False + if not all_matched(line, template_file_name, template): + valid = False - result_file.write(line) + result_file.write(line) if valid: with open(_STATUS_FILE_NAME, "w", encoding="utf-8") as status_file: status_file.write("DESIGN_KW OK\n") + return valid + def all_matched(line, template_file_name, template): valid = True diff --git a/semeio/jobs/scripts/design_kw.py b/semeio/jobs/scripts/design_kw.py index 60419845..7837f22e 100755 --- a/semeio/jobs/scripts/design_kw.py +++ b/semeio/jobs/scripts/design_kw.py @@ -1,6 +1,6 @@ -# pylint: disable=logging-fstring-interpolation import argparse import logging +import sys from semeio import valid_file from semeio.jobs.design_kw import design_kw @@ -50,12 +50,15 @@ def create_parser(): return parser -def main_entry_point(): +def main_entry_point() -> bool: parser = create_parser() parsed_args = parser.parse_args() - design_kw.run( + valid = design_kw.run( template_file_name=parsed_args.templatefile, result_file_name=parsed_args.resultfile, log_level=parsed_args.log_level, ) + + if not valid: + sys.exit(1) diff --git a/tests/jobs/design_kw/test_design_kw_entry.py b/tests/jobs/design_kw/test_design_kw_entry.py index 1bce9fbf..d0bfa360 100644 --- a/tests/jobs/design_kw/test_design_kw_entry.py +++ b/tests/jobs/design_kw/test_design_kw_entry.py @@ -22,6 +22,7 @@ def input_data(tmpdir): _templatefile = "template.yml.tmpl" +_templatefile_unmatched = "template_unmatched.yml.tmpl" _resultfile = "result.txt" _log_level = "DEBUG" _default_log_level = "WARNING" @@ -63,3 +64,12 @@ def test_argparse_result_file_missing(monkeypatch): monkeypatch.setattr(sys, "argv", ["script_name", _templatefile]) with pytest.raises(SystemExit): design_kw.main_entry_point() + + +@pytest.mark.usefixtures("input_data") +def test_unmatched_template(monkeypatch): + monkeypatch.setattr( + sys, "argv", ["script_name", _templatefile_unmatched, _resultfile] + ) + with pytest.raises(SystemExit): + design_kw.main_entry_point()