From cfd84da2200f891153bf76c52e07abe17b06bf4c Mon Sep 17 00:00:00 2001 From: mlbonhomme <bonhomme@teklia.com> Date: Tue, 28 Jun 2022 18:39:51 +0200 Subject: [PATCH] update self.config with default user_configuration values [skip ci] --- arkindex_worker/worker/base.py | 7 +++++ tests/conftest.py | 4 ++- tests/test_base_worker.py | 50 +++++++++++++++++++++++++++++++--- tox.ini | 2 ++ 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py index eacaad55..58874657 100644 --- a/arkindex_worker/worker/base.py +++ b/arkindex_worker/worker/base.py @@ -170,6 +170,13 @@ class BaseWorker(object): f"Loaded worker {worker_version['worker']['name']} revision {worker_version['revision']['hash'][0:7]} from API" ) self.config = worker_version["configuration"]["configuration"] + if "user_configuration" in worker_version["configuration"]: + # Use default values from user configurable parameters if they are set + for key, value in worker_version["configuration"][ + "user_configuration" + ].items(): + if "default" in value: + self.config.update({key: value["default"]}) self.worker_details = worker_version["worker"] required_secrets = worker_version["configuration"].get("secrets", []) elif self.args.config: diff --git a/tests/conftest.py b/tests/conftest.py index 04c8c794..a1e5049b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -101,7 +101,9 @@ def setup_api(responses, monkeypatch, cache_yaml): @pytest.fixture(autouse=True) -def give_env_variable(monkeypatch): +def give_env_variable(request, monkeypatch): + if "disable_autouse_env" in request.keywords: + return """Defines required environment variables""" monkeypatch.setenv("WORKER_VERSION_ID", "12341234-1234-1234-1234-123412341234") monkeypatch.setenv("ARKINDEX_PROCESS_ID", "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff") diff --git a/tests/test_base_worker.py b/tests/test_base_worker.py index 5d17d091..df50e02e 100644 --- a/tests/test_base_worker.py +++ b/tests/test_base_worker.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- +import json import logging import os import sys from pathlib import Path +from unittest import mock import gnupg import pytest @@ -160,11 +162,40 @@ def test_configure_worker_run(mocker, monkeypatch, responses, mock_config_api): assert worker.user_configuration == {"a": "b"} -def test_configure_worker_run_missing_worker_conf( - mocker, monkeypatch, responses, mock_config_api +@pytest.mark.disable_autouse_env +@mock.patch.dict( + os.environ, + { + "WORKER_VERSION_ID": "ddddddddd-dddd-dddd-dddd-dddddddddddd", + "ARKINDEX_PROCESS_ID": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + }, +) +def test_configure_user_configuration_defaults( + mocker, monkeypatch, mock_user_api, mock_process_api, responses ): + worker_version = { + "worker": {"id": "1234", "name": "Workerino", "slug": "workerino"}, + "revision": {"hash": "1234lala-lalalalala-lala"}, + "configuration": { + "configuration": {"param_1": "/some/path/file.pth", "param_2": 12}, + "user_configuration": { + "param_3": { + "title": "A Third Parameter", + "type": "string", + "default": "Animula vagula blandula", + }, + "param_4": {"title": "Parameter The Fourth", "type": "int"}, + "param_5": { + "title": "Parameter 5 (Five)", + "type": "bool", + "default": True, + }, + }, + }, + } + test_worker_version_id = "ddddddddd-dddd-dddd-dddd-dddddddddddd" worker = BaseWorker() - mocker.patch.object(sys, "argv", ["worker"]) + mocker.patch.object(sys, "argv") run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id) responses.add( @@ -172,9 +203,20 @@ def test_configure_worker_run_missing_worker_conf( f"http://testserver/api/v1/imports/workers/{run_id}/", json={"id": run_id}, ) + responses.add( + responses.GET, + f"http://testserver/api/v1/workers/versions/{test_worker_version_id}/", + body=json.dumps(worker_version), + content_type="application/json", + ) worker.configure() - assert worker.user_configuration == {} + assert worker.config == { + "param_1": "/some/path/file.pth", + "param_2": 12, + "param_3": "Animula vagula blandula", + "param_5": True, + } def test_configure_worker_run_missing_conf( diff --git a/tox.ini b/tox.ini index aa0cb057..6dd6c788 100644 --- a/tox.ini +++ b/tox.ini @@ -14,3 +14,5 @@ deps = [pytest] testpaths = tests +markers = + disable_autouse_env: do not use pre-set (autouse) environment variables. -- GitLab