diff --git a/arkindex_worker/worker.py b/arkindex_worker/worker.py index fc0b54bfb9e523b234d640946c05742a318b62f4..7e7dfb37ac04a6e81610c770e567ce911449ca4a 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 17519bba2ca20b45c9c6b7b6151a46435dacfa7f..7359ac76547671a14cfba92933765ea787488963 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")