diff --git a/arkindex_worker/git.py b/arkindex_worker/git.py index cc904010ba5af8ad0e26f4b01755dfcfd3229ef6..92a38125eb39a1556f2a8f89a3da22ce35e00ae8 100644 --- a/arkindex_worker/git.py +++ b/arkindex_worker/git.py @@ -207,7 +207,6 @@ class GitHelper: in worker.configure() configure the git helper and start the cloning: ``` gitlab = GitlabHelper(...) - workflow_id = os.environ["ARKINDEX_PROCESS_ID"] prepare_git_key(...) self.git_helper = GitHelper(workflow_id=workflow_id, gitlab_helper=gitlab, ...) self.git_helper.run_clone_in_background() diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py index 1e63819edfd7314012a968517db94de6d41bd943..cc78ce07c10e10d9cca460f1b05895274b67a28e 100644 --- a/arkindex_worker/worker/base.py +++ b/arkindex_worker/worker/base.py @@ -85,7 +85,6 @@ class BaseWorker(object): help=( "Run worker in developer mode. " "Worker will be in read-only state even if a worker_version is supplied. " - "ARKINDEX_PROCESS_ID environment variable is not required with this flag." ), action="store_true", default=False, @@ -111,6 +110,11 @@ class BaseWorker(object): logger.warning( "Missing WORKER_VERSION_ID environment variable, worker is in read-only mode" ) + self.worker_run_id = os.environ.get("ARKINDEX_WORKER_RUN_ID") + if not self.worker_run_id: + logger.warning( + "Missing ARKINDEX_WORKER_RUN_ID environment variable, worker is in read-only mode" + ) logger.info(f"Worker will use {self.work_dir} as working directory") @@ -130,7 +134,11 @@ class BaseWorker(object): or when no worker version ID is provided. :rtype: bool """ - return self.args.dev or self.worker_version_id is None + return ( + self.args.dev + or self.worker_version_id is None + or self.worker_run_id is None + ) def configure_for_developers(self): assert self.is_read_only @@ -170,21 +178,20 @@ class BaseWorker(object): self.api_client = ArkindexClient(**options_from_env()) logger.debug(f"Setup Arkindex API client on {self.api_client.document.url}") + # Load worker run information + worker_run = self.request("RetrieveWorkerRun", id=self.worker_run_id) + # Load process information - assert os.environ.get( - "ARKINDEX_PROCESS_ID" - ), "ARKINDEX_PROCESS_ID environment variable is not defined" - self.process_information = self.request( - "RetrieveDataImport", id=os.environ["ARKINDEX_PROCESS_ID"] - ) + self.process_information = worker_run["process"] - # Retrieve initial configuration from API - worker_version = self.request( - "RetrieveWorkerVersion", id=self.worker_version_id - ) + # Load worker version information + worker_version = worker_run["worker_version"] + self.worker_details = worker_version["worker"] logger.info( - f"Loaded worker {worker_version['worker']['name']} revision {worker_version['revision']['hash'][0:7]} from API" + f"Loaded worker {self.worker_details['name']} revision {worker_version['revision']['hash'][0:7]} from API" ) + + # Retrieve initial configuration from API self.config = worker_version["configuration"]["configuration"] if "user_configuration" in worker_version["configuration"]: # Add default values (if set) to user_configuration @@ -193,30 +200,20 @@ class BaseWorker(object): ].items(): if "default" in value: self.user_configuration[key] = value["default"] - self.worker_details = worker_version["worker"] - required_secrets = worker_version["configuration"].get("secrets", []) # Load all required secrets + required_secrets = worker_version["configuration"].get("secrets", []) self.secrets = {name: self.load_secret(name) for name in required_secrets} # Load worker run configuration when available - if os.environ.get("ARKINDEX_WORKER_RUN_ID"): - worker_run = self.request( - "RetrieveWorkerRun", id=os.environ["ARKINDEX_WORKER_RUN_ID"] - ) - configuration_id = worker_run.get("configuration_id") - if configuration_id: - worker_configuration = self.request( - "RetrieveWorkerConfiguration", id=configuration_id - ) - self.user_configuration = worker_configuration.get("configuration") - 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") + worker_configuration = worker_run.get("configuration") + self.user_configuration = worker_configuration.get("configuration") + 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.get("debug"): + logger.setLevel(logging.DEBUG) + logger.debug("Debug output enabled") def configure_cache(self): task_id = os.environ.get("PONOS_TASK") diff --git a/tests/conftest.py b/tests/conftest.py index 64af8eb13a10e4299e3b4dcf71841ab821da3cbb..ea16385f33c0e1a0d5dec64c59d273208d58bd07 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -104,119 +104,86 @@ def setup_api(responses, monkeypatch, cache_yaml): def give_env_variable(request, monkeypatch): """Defines required environment variables""" monkeypatch.setenv("WORKER_VERSION_ID", "12341234-1234-1234-1234-123412341234") - monkeypatch.setenv("ARKINDEX_PROCESS_ID", "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff") + monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", "56785678-5678-5678-5678-567856785678") monkeypatch.setenv("ARKINDEX_CORPUS_ID", "11111111-1111-1111-1111-111111111111") @pytest.fixture -def mock_config_api(mock_worker_version_api, mock_process_api): - """Mock all API endpoints required to configure a worker""" - pass - - -@pytest.fixture -def mock_worker_version_api(responses): - """Provide a mock API response to get worker configuration""" +def mock_worker_run_api(responses): + """Provide a mock API response to get worker run information""" payload = { - "id": "12341234-1234-1234-1234-123412341234", - "configuration": { - "docker": {"image": "python:3"}, - "configuration": {"someKey": "someValue"}, - "secrets": [], - }, - "revision": { - "hash": "deadbeef1234", - "name": "some git revision", - }, - "docker_image": "python:3", - "docker_image_name": "python:3", - "state": "created", + "id": "56785678-5678-5678-5678-567856785678", + "parents": [], + "worker_version_id": "12341234-1234-1234-1234-123412341234", + "model_version_id": None, + "dataimport_id": "0e6053d5-0d50-41dd-88b6-90907493c433", "worker": { "id": "deadbeef-1234-5678-1234-worker", "name": "Fake worker", "slug": "fake_worker", "type": "classifier", }, - } - responses.add( - responses.GET, - "http://testserver/api/v1/workers/versions/12341234-1234-1234-1234-123412341234/", - status=200, - body=json.dumps(payload), - content_type="application/json", - ) - - -@pytest.fixture -def mock_worker_version_user_configuration_api(responses): - """ - Provide a mock API response to get a worker configuration - that includes a `user_configuration` - """ - payload = { - "worker": {"id": "1234", "name": "Workerino", "slug": "workerino"}, - "revision": {"hash": "1234lala-lalalalala-lala"}, + "configuration_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "worker_version": { + "id": "12341234-1234-1234-1234-123412341234", + "configuration": { + "docker": {"image": "python:3"}, + "configuration": {"someKey": "someValue"}, + "secrets": [], + }, + "revision": { + "hash": "deadbeef1234", + "name": "some git revision", + }, + "docker_image": "python:3", + "docker_image_name": "python:3", + "state": "created", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + }, "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, + "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", + "name": "string", + "configuration": {}, + }, + "process": { + "name": None, + "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "state": "running", + "mode": "workers", + "corpus": "11111111-1111-1111-1111-111111111111", + "workflow": "http://testserver/ponos/v1/workflow/12341234-1234-1234-1234-123412341234/", + "files": [], + "revision": None, + "element": { + "id": "1234-deadbeef", + "type": "folder", + "name": "Test folder", + "corpus": { + "id": "11111111-1111-1111-1111-111111111111", + "name": "John Doe project", + "public": False, }, + "thumbnail_url": "http://testserver/thumbnail.png", + "zone": None, + "thumbnail_put_url": "http://testserver/thumbnail.png", }, + "folder_type": None, + "element_type": "page", + "element_name_contains": None, + "load_children": True, + "use_cache": False, + "activity_state": "ready", }, } - responses.add( - responses.GET, - "http://testserver/api/v1/workers/versions/12341234-1234-1234-1234-123412341234/", - status=200, - body=json.dumps(payload), - content_type="application/json", - ) - -@pytest.fixture -def mock_process_api(responses): - """Provide a mock of the API response to get information on a process. Workers activity is enabled""" - payload = { - "name": None, - "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", - "state": "running", - "mode": "workers", - "corpus": "11111111-1111-1111-1111-111111111111", - "workflow": "http://testserver/ponos/v1/workflow/12341234-1234-1234-1234-123412341234/", - "files": [], - "revision": None, - "element": { - "id": "12341234-1234-1234-1234-123412341234", - "type": "folder", - "name": "Test folder", - "corpus": { - "id": "11111111-1111-1111-1111-111111111111", - "name": "John Doe project", - "public": False, - }, - "thumbnail_url": "http://testserver/thumbnail.png", - "zone": None, - "thumbnail_put_url": "http://testserver/thumbnail.png", - }, - "folder_type": None, - "element_type": "page", - "element_name_contains": None, - "load_children": True, - "use_cache": False, - "activity_state": "ready", - } responses.add( responses.GET, - "http://testserver/api/v1/imports/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff/", + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", status=200, body=json.dumps(payload), content_type="application/json", @@ -236,7 +203,7 @@ def mock_activity_calls(responses): @pytest.fixture -def mock_elements_worker(monkeypatch, mock_config_api): +def mock_elements_worker(monkeypatch, mock_worker_run_api): """Build and configure an ElementsWorker with fixed CLI parameters to avoid issues with pytest""" monkeypatch.setattr(sys, "argv", ["worker"]) @@ -267,7 +234,7 @@ def mock_elements_worker_with_list(monkeypatch, responses, mock_elements_worker) @pytest.fixture -def mock_base_worker_with_cache(mocker, monkeypatch, mock_config_api): +def mock_base_worker_with_cache(mocker, monkeypatch, mock_worker_run_api): """Build a BaseWorker using SQLite cache, also mocking a PONOS_TASK""" monkeypatch.setattr(sys, "argv", ["worker"]) @@ -277,7 +244,7 @@ def mock_base_worker_with_cache(mocker, monkeypatch, mock_config_api): @pytest.fixture -def mock_elements_worker_with_cache(monkeypatch, mock_config_api, tmp_path): +def mock_elements_worker_with_cache(monkeypatch, mock_worker_run_api, tmp_path): """Build and configure an ElementsWorker using SQLite cache with fixed CLI parameters to avoid issues with pytest""" cache_path = tmp_path / "db.sqlite" init_cache_db(cache_path) diff --git a/tests/test_base_worker.py b/tests/test_base_worker.py index 376aee002dac330d95937fe96aa19cf0cd63eaa2..0a6cf496b9774f429e3dfc27a4d05f19af79a973 100644 --- a/tests/test_base_worker.py +++ b/tests/test_base_worker.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import json import logging import os import sys @@ -48,6 +49,7 @@ def test_init_var_ponos_data_given(monkeypatch): def test_init_var_worker_version_id_missing(monkeypatch): monkeypatch.setattr(sys, "argv", ["worker"]) monkeypatch.delenv("WORKER_VERSION_ID") + monkeypatch.delenv("ARKINDEX_WORKER_RUN_ID") worker = BaseWorker() worker.args = worker.parser.parse_args() worker.configure_for_developers() @@ -56,6 +58,17 @@ def test_init_var_worker_version_id_missing(monkeypatch): assert worker.config == {} # default empty case +def test_init_var_worker_run_id_missing(monkeypatch): + monkeypatch.setattr(sys, "argv", ["worker"]) + monkeypatch.delenv("ARKINDEX_WORKER_RUN_ID") + worker = BaseWorker() + worker.args = worker.parser.parse_args() + worker.configure_for_developers() + assert worker.worker_run_id is None + assert worker.is_read_only is True + assert worker.config == {} # default empty case + + def test_init_var_worker_local_file(monkeypatch, tmp_path): # Build a dummy yaml config file config = tmp_path / "config.yml" @@ -63,6 +76,7 @@ def test_init_var_worker_local_file(monkeypatch, tmp_path): monkeypatch.setattr(sys, "argv", ["worker", "-c", str(config)]) monkeypatch.delenv("WORKER_VERSION_ID") + monkeypatch.delenv("ARKINDEX_WORKER_RUN_ID") worker = BaseWorker() worker.args = worker.parser.parse_args() worker.configure_for_developers() @@ -73,43 +87,47 @@ def test_init_var_worker_local_file(monkeypatch, tmp_path): config.unlink() -def test_cli_default(mocker, mock_config_api): +def test_cli_default(mocker, mock_worker_run_api): worker = BaseWorker() assert logger.level == logging.NOTSET assert not hasattr(worker, "api_client") mocker.patch.object(sys, "argv", ["worker"]) worker.args = worker.parser.parse_args() + assert worker.is_read_only is False + assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.worker_run_id == "56785678-5678-5678-5678-567856785678" + worker.configure() assert not worker.args.verbose assert logger.level == logging.NOTSET 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_cli_arg_verbose_given(mocker, mock_config_api): +def test_cli_arg_verbose_given(mocker, mock_worker_run_api): worker = BaseWorker() assert logger.level == logging.NOTSET assert not hasattr(worker, "api_client") mocker.patch.object(sys, "argv", ["worker", "-v"]) worker.args = worker.parser.parse_args() + assert worker.is_read_only is False + assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.worker_run_id == "56785678-5678-5678-5678-567856785678" + worker.configure() assert worker.args.verbose 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_cli_envvar_debug_given(mocker, monkeypatch, mock_config_api): +def test_cli_envvar_debug_given(mocker, monkeypatch, mock_worker_run_api): worker = BaseWorker() assert logger.level == logging.NOTSET @@ -117,11 +135,13 @@ def test_cli_envvar_debug_given(mocker, monkeypatch, mock_config_api): mocker.patch.object(sys, "argv", ["worker"]) monkeypatch.setenv("ARKINDEX_DEBUG", True) worker.args = worker.parser.parse_args() + assert worker.is_read_only is False + assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.worker_run_id == "56785678-5678-5678-5678-567856785678" + 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) @@ -133,36 +153,65 @@ def test_configure_dev_mode(mocker, monkeypatch): """ worker = BaseWorker() mocker.patch.object(sys, "argv", ["worker", "--dev"]) - monkeypatch.setenv( - "ARKINDEX_WORKER_RUN_ID", "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" - ) worker.args = worker.parser.parse_args() worker.configure_for_developers() assert worker.args.dev is True assert worker.process_information is None assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.worker_run_id == "56785678-5678-5678-5678-567856785678" assert worker.is_read_only is True assert worker.user_configuration == {} -def test_configure_worker_run(mocker, monkeypatch, responses, mock_config_api): +def test_configure_worker_run(mocker, monkeypatch, responses): 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) - responses.add( - responses.GET, - f"http://testserver/api/v1/imports/workers/{run_id}/", - json={"id": run_id, "configuration_id": configuration_id}, - ) + user_configuration = { + "id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", + "name": "BBB", + "configuration": {"a": "b"}, + } + payload = { + "id": "56785678-5678-5678-5678-567856785678", + "parents": [], + "worker_version_id": "12341234-1234-1234-1234-123412341234", + "model_version_id": None, + "dataimport_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "configuration_id": user_configuration["id"], + "worker_version": { + "id": "12341234-1234-1234-1234-123412341234", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "revision": {"hash": "deadbeef1234"}, + "configuration": {"configuration": {}}, + }, + "configuration": user_configuration, + "process": {"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff"}, + } + responses.add( responses.GET, - f"http://testserver/api/v1/workers/configurations/{configuration_id}/", - json={"id": configuration_id, "name": "BBB", "configuration": {"a": "b"}}, + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", + status=200, + body=json.dumps(payload), + content_type="application/json", ) worker.args = worker.parser.parse_args() + assert worker.is_read_only is False + assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" + assert worker.worker_run_id == "56785678-5678-5678-5678-567856785678" + worker.configure() assert worker.user_configuration == {"a": "b"} @@ -171,20 +220,56 @@ def test_configure_worker_run(mocker, monkeypatch, responses, mock_config_api): def test_configure_user_configuration_defaults( mocker, monkeypatch, - mock_worker_version_user_configuration_api, - mock_process_api, responses, ): worker = BaseWorker() mocker.patch.object(sys, "argv") - run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" - monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id) + worker.args = worker.parser.parse_args() + + payload = { + "id": "56785678-5678-5678-5678-567856785678", + "parents": [], + "worker_version_id": "12341234-1234-1234-1234-123412341234", + "model_version_id": None, + "dataimport_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "configuration_id": "af0daaf4-983e-4703-a7ed-a10f146d6684", + "worker_version": { + "id": "12341234-1234-1234-1234-123412341234", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "revision": {"hash": "deadbeef1234"}, + "configuration": { + "configuration": {"param_1": "/some/path/file.pth", "param_2": 12} + }, + }, + "configuration": { + "id": "af0daaf4-983e-4703-a7ed-a10f146d6684", + "name": "my-userconfig", + "configuration": { + "param_3": "Animula vagula blandula", + "param_5": True, + }, + }, + "process": {"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff"}, + } responses.add( responses.GET, - f"http://testserver/api/v1/imports/workers/{run_id}/", - json={"id": run_id}, + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", + status=200, + body=json.dumps(payload), + content_type="application/json", ) - worker.args = worker.parser.parse_args() + worker.configure() assert worker.config == {"param_1": "/some/path/file.pth", "param_2": 12} @@ -194,52 +279,95 @@ def test_configure_user_configuration_defaults( } -@pytest.mark.parametrize("debug_dict", [{"debug": True}, {"debug": False}]) -def test_configure_user_config_debug( - mocker, monkeypatch, responses, debug_dict, mock_config_api -): +@pytest.mark.parametrize("debug", (True, False)) +def test_configure_user_config_debug(mocker, monkeypatch, responses, debug): 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 + payload = { + "id": "56785678-5678-5678-5678-567856785678", + "parents": [], + "worker_version_id": "12341234-1234-1234-1234-123412341234", + "model_version_id": None, + "dataimport_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "configuration_id": "af0daaf4-983e-4703-a7ed-a10f146d6684", + "worker_version": { + "id": "12341234-1234-1234-1234-123412341234", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "revision": {"hash": "deadbeef1234"}, + "configuration": {"configuration": {}}, + }, + "configuration": { + "id": "af0daaf4-983e-4703-a7ed-a10f146d6684", + "name": "BBB", + "configuration": {"debug": debug}, + }, + "process": {"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff"}, + } 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}, + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", + status=200, + body=json.dumps(payload), + content_type="application/json", ) worker.args = worker.parser.parse_args() worker.configure() - assert worker.user_configuration == debug_dict - expected_log_level = logging.DEBUG if debug_dict["debug"] else logging.NOTSET + assert worker.user_configuration == {"debug": debug} + expected_log_level = logging.DEBUG if 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 -): +def test_configure_worker_run_missing_conf(mocker, monkeypatch, responses): 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) - responses.add( - responses.GET, - f"http://testserver/api/v1/imports/workers/{run_id}/", - json={"id": run_id, "configuration_id": configuration_id}, - ) + + payload = { + "id": "56785678-5678-5678-5678-567856785678", + "parents": [], + "worker_version_id": "12341234-1234-1234-1234-123412341234", + "model_version_id": None, + "dataimport_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "configuration_id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", + "worker_version": { + "id": "12341234-1234-1234-1234-123412341234", + "worker": { + "id": "deadbeef-1234-5678-1234-worker", + "name": "Fake worker", + "slug": "fake_worker", + "type": "classifier", + }, + "revision": {"hash": "deadbeef1234"}, + "configuration": {"configuration": {}}, + }, + "configuration": {"id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "name": "BBB"}, + "process": {"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff"}, + } responses.add( responses.GET, - f"http://testserver/api/v1/workers/configurations/{configuration_id}/", - json={"id": configuration_id, "name": "BBB"}, + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", + status=200, + body=json.dumps(payload), + content_type="application/json", ) worker.args = worker.parser.parse_args() worker.configure() diff --git a/tests/test_elements_worker/__init__.py b/tests/test_elements_worker/__init__.py index 3748d0a2618a3ce191413f8efd9ea329cc96cd3c..6b4429bcdf145a8a526e0fd20cca08953049a00c 100644 --- a/tests/test_elements_worker/__init__.py +++ b/tests/test_elements_worker/__init__.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- # API calls during worker configuration BASE_API_CALLS = [ - ("GET", "http://testserver/api/v1/imports/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff/"), ( "GET", - "http://testserver/api/v1/workers/versions/12341234-1234-1234-1234-123412341234/", + "http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/", ), ] diff --git a/tests/test_elements_worker/test_cli.py b/tests/test_elements_worker/test_cli.py index 948ddb6321100f82dc566e87129a625bb7e6022b..ed2dfbe1ab7c6e146436c4918283a6cd203c1ebf 100644 --- a/tests/test_elements_worker/test_cli.py +++ b/tests/test_elements_worker/test_cli.py @@ -10,7 +10,7 @@ import pytest from arkindex_worker.worker import ElementsWorker -def test_cli_default(monkeypatch, mock_config_api): +def test_cli_default(monkeypatch, mock_worker_run_api): _, path = tempfile.mkstemp() with open(path, "w") as f: json.dump( @@ -33,7 +33,7 @@ def test_cli_default(monkeypatch, mock_config_api): os.unlink(path) -def test_cli_arg_elements_list_given(mocker, mock_config_api): +def test_cli_arg_elements_list_given(mocker, mock_worker_run_api): _, path = tempfile.mkstemp() with open(path, "w") as f: json.dump( @@ -62,7 +62,7 @@ def test_cli_arg_element_one_given_not_uuid(mocker): worker.configure() -def test_cli_arg_element_one_given(mocker, mock_config_api): +def test_cli_arg_element_one_given(mocker, mock_worker_run_api): mocker.patch.object( sys, "argv", ["worker", "--element", "12341234-1234-1234-1234-123412341234"] ) @@ -74,7 +74,7 @@ def test_cli_arg_element_one_given(mocker, mock_config_api): assert not worker.args.elements_list -def test_cli_arg_element_many_given(mocker, mock_config_api): +def test_cli_arg_element_many_given(mocker, mock_worker_run_api): mocker.patch.object( sys, "argv", diff --git a/tests/test_elements_worker/test_worker.py b/tests/test_elements_worker/test_worker.py index e0bedf3122b1c3e41d08d93ba0cdd6777731ea60..1eeb21d13a6caad4ee97aece6088f188464f5f07 100644 --- a/tests/test_elements_worker/test_worker.py +++ b/tests/test_elements_worker/test_worker.py @@ -79,15 +79,8 @@ def test_readonly(responses, mock_elements_worker): ] == BASE_API_CALLS -def test_activities_disabled(responses, monkeypatch, mock_worker_version_api): +def test_activities_disabled(responses, monkeypatch, mock_worker_run_api): """Test worker process elements without updating activities when they are disabled for the process""" - responses.add( - responses.GET, - "http://testserver/api/v1/imports/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff/", - status=200, - body=json.dumps({"activity_state": "disabled"}), - content_type="application/json", - ) monkeypatch.setattr(sys, "argv", ["worker"]) worker = ElementsWorker() worker.configure() @@ -113,7 +106,7 @@ def test_activities_dev_mode(mocker): assert worker.store_activity is False -def test_update_call(responses, mock_elements_worker, mock_process_api): +def test_update_call(responses, mock_elements_worker, mock_worker_run_api): """Test an update call with feature enabled triggers an API call""" responses.add( responses.PUT,