From effdfc32738138d487d6e814fe09b426627ae38e Mon Sep 17 00:00:00 2001 From: Matej Cotman Date: Wed, 11 Aug 2021 13:16:53 +0300 Subject: [PATCH 1/2] feat(config): add generic config options to override config entries --- src/oxygen/base_handler.py | 10 +++++++++- src/oxygen/gatling.py | 5 ++++- src/oxygen/junit.py | 5 ++++- src/oxygen/oxygen.py | 5 ++++- src/oxygen/zap.py | 5 ++++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/oxygen/base_handler.py b/src/oxygen/base_handler.py index eb422c5..70eb16b 100644 --- a/src/oxygen/base_handler.py +++ b/src/oxygen/base_handler.py @@ -2,8 +2,16 @@ from .robot_interface import RobotInterface + class BaseHandler(object): - DEFAULT_CLI = {tuple(['resultfile']): {}} + DEFAULT_CLI = { + tuple(['resultfile']): {}, + ('-c', '--config'): { + 'action': 'append', + 'nargs': 2, + 'metavar': ('name', 'value') + } + } def __init__(self, config): ''' diff --git a/src/oxygen/gatling.py b/src/oxygen/gatling.py index fa8b107..4f8f5ff 100644 --- a/src/oxygen/gatling.py +++ b/src/oxygen/gatling.py @@ -35,7 +35,10 @@ def run_gatling(self, result_file, command, check_return_code=False, **env): logger.info('Result file: {}'.format(result_file)) return result_file - def parse_results(self, result_file): + def parse_results(self, result_file, config_options): + # works from python 3.5 onwards + self._config = {**self._config, **config_options} + return self._transform_tests(validate_path(result_file).resolve()) def _transform_tests(self, result_file): diff --git a/src/oxygen/junit.py b/src/oxygen/junit.py index 2ff39f5..03c3aec 100644 --- a/src/oxygen/junit.py +++ b/src/oxygen/junit.py @@ -23,7 +23,10 @@ def run_junit(self, result_file, command, check_return_code=False, **env): logger.info('Result file: {}'.format(result_file)) return result_file - def parse_results(self, result_file): + def parse_results(self, result_file, config_options): + # works from python 3.5 onwards + self._config = {**self._config, **config_options} + result_file = self._validate_path(result_file) try: xml = JUnitXml.fromfile(result_file) diff --git a/src/oxygen/oxygen.py b/src/oxygen/oxygen.py index 6b39606..b798e52 100644 --- a/src/oxygen/oxygen.py +++ b/src/oxygen/oxygen.py @@ -1,3 +1,4 @@ +import json from argparse import ArgumentParser from datetime import datetime, timedelta @@ -231,7 +232,9 @@ def run(self): if not vars(args): parser.error('No arguments given') output_filename = self.get_output_filename(args.resultfile) - parsed_results = args.func(args.resultfile) + config_options = { + name: json.loads(value) for (name, value) in args.config or []} + parsed_results = args.func(args.resultfile, config_options) robot_suite = RobotInterface().running.build_suite(parsed_results) robot_suite.run(output=output_filename, log=None, diff --git a/src/oxygen/zap.py b/src/oxygen/zap.py index 96d3739..7bc45de 100644 --- a/src/oxygen/zap.py +++ b/src/oxygen/zap.py @@ -26,7 +26,10 @@ def run_zap(self, result_file, command, check_return_code=False, **env): return result_file - def parse_results(self, result_file): + def parse_results(self, result_file, config_options): + # works from python 3.5 onwards + self._config = {**self._config, **config_options} + zap_dict = self._read_results(validate_path(result_file).resolve()) return self._parse_zap_dict(zap_dict) From 578864dc890a0e17b4ecdf4c55ec1eef01a8a2ab Mon Sep 17 00:00:00 2001 From: Matej Cotman Date: Thu, 12 Aug 2021 14:16:04 +0300 Subject: [PATCH 2/2] fix(config_options): fixing tests, add default for config_options --- example/my_parser.py | 2 +- src/oxygen/base_handler.py | 2 +- src/oxygen/gatling.py | 2 +- src/oxygen/junit.py | 2 +- src/oxygen/zap.py | 2 +- tests/utest/oxygen/test_oxygen_cli.py | 3 ++- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/example/my_parser.py b/example/my_parser.py index ad5ff33..0dc3560 100644 --- a/example/my_parser.py +++ b/example/my_parser.py @@ -17,7 +17,7 @@ def run_my_tests(self, resultfile): json.dump(self.RESULTS, f) return resultfile - def parse_results(self, resultfile): + def parse_results(self, resultfile, config_options={}): with open(resultfile, 'r') as f: results = json.load(f) return { diff --git a/src/oxygen/base_handler.py b/src/oxygen/base_handler.py index 70eb16b..39c62a1 100644 --- a/src/oxygen/base_handler.py +++ b/src/oxygen/base_handler.py @@ -41,7 +41,7 @@ def cli(self): ''' return self.DEFAULT_CLI - def parse_results(self, kw_args): + def parse_results(self, resultfile, config_options={}): raise NotImplementedError('Actual handler implementation should override ' 'this with proper implementation!') diff --git a/src/oxygen/gatling.py b/src/oxygen/gatling.py index 4f8f5ff..d8e8603 100644 --- a/src/oxygen/gatling.py +++ b/src/oxygen/gatling.py @@ -35,7 +35,7 @@ def run_gatling(self, result_file, command, check_return_code=False, **env): logger.info('Result file: {}'.format(result_file)) return result_file - def parse_results(self, result_file, config_options): + def parse_results(self, result_file, config_options={}): # works from python 3.5 onwards self._config = {**self._config, **config_options} diff --git a/src/oxygen/junit.py b/src/oxygen/junit.py index 03c3aec..e31a31f 100644 --- a/src/oxygen/junit.py +++ b/src/oxygen/junit.py @@ -23,7 +23,7 @@ def run_junit(self, result_file, command, check_return_code=False, **env): logger.info('Result file: {}'.format(result_file)) return result_file - def parse_results(self, result_file, config_options): + def parse_results(self, result_file, config_options={}): # works from python 3.5 onwards self._config = {**self._config, **config_options} diff --git a/src/oxygen/zap.py b/src/oxygen/zap.py index 7bc45de..9ae5af6 100644 --- a/src/oxygen/zap.py +++ b/src/oxygen/zap.py @@ -26,7 +26,7 @@ def run_zap(self, result_file, command, check_return_code=False, **env): return result_file - def parse_results(self, result_file, config_options): + def parse_results(self, result_file, config_options={}): # works from python 3.5 onwards self._config = {**self._config, **config_options} diff --git a/tests/utest/oxygen/test_oxygen_cli.py b/tests/utest/oxygen/test_oxygen_cli.py index 5fbab5e..994d267 100644 --- a/tests/utest/oxygen/test_oxygen_cli.py +++ b/tests/utest/oxygen/test_oxygen_cli.py @@ -63,7 +63,8 @@ def setUp(self): @patch('oxygen.oxygen.OxygenCLI.parse_args') def test_run(self, mock_parse_args, mock_robot_iface): mock_parse_args.return_value = Mock(resultfile='path/to/file.xml', - func=lambda _: {'some': 'results'}) + config=[], + func=lambda *_: {'some': 'results'}) expected_suite = create_autospec(TestSuite) mock = Mock() mock.running.build_suite = Mock(return_value=expected_suite)