diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py index eacaad55cf26660fe9207057e34486cacf84fd61..58874657a8fb6fb75a147d704ade510f7cbae911 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 04c8c7949f7102b1e8a492fb4f85971bbf995413..a1e5049b8a163df6e12fd912723dafe5666c2a7d 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 5d17d091cdd8a7db22a41f3a8fd53ecb731f710a..df50e02e91bc2136a3b562004277c39362824765 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 aa0cb057b524dbd1f80595c7e06f54953a378df5..6dd6c78857b6ac04165c16fc12c2bc7da3361b42 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.