From 0232207410b7df8c4edbf19d8487a1d6c12552a9 Mon Sep 17 00:00:00 2001 From: Chaza Abdelwahab <abdelwahab@teklia.com> Date: Fri, 8 Jul 2022 13:48:21 +0000 Subject: [PATCH] Resolve "Add a debug mode to base worker and allow upper workers to use it" --- arkindex_worker/worker/base.py | 10 ++++++-- tests/test_base_worker.py | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py index 8e6113d5..2a20e0a1 100644 --- a/arkindex_worker/worker/base.py +++ b/arkindex_worker/worker/base.py @@ -118,6 +118,7 @@ class BaseWorker(object): self.parser.add_argument( "-v", "--verbose", + "--debug", help="Display more information on events and errors", action="store_true", default=False, @@ -138,8 +139,8 @@ class BaseWorker(object): # CLI args are stored on the instance so that implementations can access them self.args = self.parser.parse_args() - # Setup logging level - if self.args.verbose: + # Setup logging level if verbose or if ARKINDEX_DEBUG is set to true + if self.args.verbose or os.environ.get("ARKINDEX_DEBUG"): logger.setLevel(logging.DEBUG) logger.debug("Debug output enabled") @@ -210,6 +211,11 @@ class BaseWorker(object): if self.user_configuration: logger.info("Loaded user configuration from WorkerRun") + # if debug mode is set to true activate debug mode in logger + if self.user_configuration and self.user_configuration.get("debug"): + logger.setLevel(logging.DEBUG) + logger.debug("Debug output enabled") + task_id = os.environ.get("PONOS_TASK") paths = None if self.support_cache and self.args.database is not None: diff --git a/tests/test_base_worker.py b/tests/test_base_worker.py index fbcbfb45..5d926758 100644 --- a/tests/test_base_worker.py +++ b/tests/test_base_worker.py @@ -119,6 +119,24 @@ def test_cli_arg_verbose_given(mocker, mock_config_api): logger.setLevel(logging.NOTSET) +def test_cli_envvar_debug_given(mocker, monkeypatch, mock_config_api): + worker = BaseWorker() + + assert logger.level == logging.NOTSET + assert not hasattr(worker, "api_client") + mocker.patch.object(sys, "argv", ["worker"]) + monkeypatch.setenv("ARKINDEX_DEBUG", True) + + worker.configure() + assert logger.level == logging.DEBUG + assert worker.api_client + assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.is_read_only is False + assert worker.config == {"someKey": "someValue"} # from API + + logger.setLevel(logging.NOTSET) + + def test_configure_dev_mode( mocker, monkeypatch, mock_user_api, mock_worker_version_api ): @@ -186,6 +204,34 @@ def test_configure_user_configuration_defaults( } +@pytest.mark.parametrize("debug_dict", [{"debug": True}, {"debug": False}]) +def test_configure_user_config_debug( + mocker, monkeypatch, responses, mock_config_api, debug_dict +): + worker = BaseWorker() + mocker.patch.object(sys, "argv", ["worker"]) + run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + configuration_id = "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id) + assert logger.level == logging.NOTSET + responses.add( + responses.GET, + f"http://testserver/api/v1/imports/workers/{run_id}/", + json={"id": run_id, "configuration_id": configuration_id}, + ) + responses.add( + responses.GET, + f"http://testserver/api/v1/workers/configurations/{configuration_id}/", + json={"id": configuration_id, "name": "BBB", "configuration": debug_dict}, + ) + worker.configure() + + assert worker.user_configuration == debug_dict + expected_log_level = logging.DEBUG if debug_dict["debug"] else logging.NOTSET + assert logger.level == expected_log_level + logger.setLevel(logging.NOTSET) + + def test_configure_worker_run_missing_conf( mocker, monkeypatch, responses, mock_config_api ): -- GitLab