From 4f71d07b16d05bde31822a94799975a7d9d98c3c Mon Sep 17 00:00:00 2001 From: Martin <maarand@teklia.com> Date: Tue, 27 Oct 2020 17:40:11 +0100 Subject: [PATCH] get ml_result manual slug --- arkindex_worker/worker.py | 8 ++++++ tests/test_elements_worker.py | 46 ++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/arkindex_worker/worker.py b/arkindex_worker/worker.py index fc0b54bf..7e7dfb37 100644 --- a/arkindex_worker/worker.py +++ b/arkindex_worker/worker.py @@ -18,6 +18,8 @@ from arkindex_worker import logger from arkindex_worker.models import Element from arkindex_worker.reporting import Reporter +MANUAL_SLUG = "manual" + class BaseWorker(object): def __init__(self, description="Arkindex Base Worker"): @@ -604,5 +606,11 @@ class ElementsWorker(BaseWorker): # transcriptions have worker_version_id but elements have worker_version elif "worker_version_id" in ml_result and ml_result["worker_version_id"]: return self.get_worker_version_slug(ml_result["worker_version_id"]) + elif "worker_version" in ml_result and ml_result["worker_version"] is None: + return MANUAL_SLUG + elif ( + "worker_version_id" in ml_result and ml_result["worker_version_id"] is None + ): + return MANUAL_SLUG else: raise ValueError(f"Unable to get slug from: {ml_result}") diff --git a/tests/test_elements_worker.py b/tests/test_elements_worker.py index 17519bba..7359ac76 100644 --- a/tests/test_elements_worker.py +++ b/tests/test_elements_worker.py @@ -10,7 +10,12 @@ import pytest from apistar.exceptions import ErrorResponse from arkindex_worker.models import Element -from arkindex_worker.worker import ElementsWorker, EntityType, TranscriptionType +from arkindex_worker.worker import ( + MANUAL_SLUG, + ElementsWorker, + EntityType, + TranscriptionType, +) TRANSCRIPTIONS_SAMPLE = [ { @@ -1888,3 +1893,42 @@ def test_get_slug__transcriptions(fake_transcriptions_small, fake_dummy_worker): assert slug == TEST_SLUG assert len(api_client.history) == 1 assert not api_client.responses + + +@pytest.mark.parametrize( + "ml_result, expected_slug", + ( + # old + ({"source": {"slug": "test_123"}}, "test_123"), + ({"source": {"slug": "test_123"}, "worker_version": None}, "test_123"), + ({"source": {"slug": "test_123"}, "worker_version_id": None}, "test_123"), + # new + ({"source": None, "worker_version": "foo_1"}, "mock_slug"), + ({"source": None, "worker_version_id": "foo_1"}, "mock_slug"), + ({"worker_version_id": "foo_1"}, "mock_slug"), + # manual + ({"worker_version_id": None}, MANUAL_SLUG), + ({"worker_version": None}, MANUAL_SLUG), + ({"source": None, "worker_version": None}, MANUAL_SLUG), + ), +) +def test_get_ml_result_slug__ok(mocker, fake_dummy_worker, ml_result, expected_slug): + fake_dummy_worker.get_worker_version_slug = mocker.MagicMock() + fake_dummy_worker.get_worker_version_slug.return_value = "mock_slug" + + slug = fake_dummy_worker.get_ml_result_slug(ml_result) + assert slug == expected_slug + + +@pytest.mark.parametrize( + "ml_result", + ( + ({},), + ({"source": None},), + ({"source": {"slug": None}},), + ), +) +def test_get_ml_result_slug__fail(fake_dummy_worker, ml_result): + with pytest.raises(ValueError) as excinfo: + fake_dummy_worker.get_ml_result_slug(ml_result) + assert str(excinfo.value).startswith("Unable to get slug from") -- GitLab