From 023d4692d6d0a5b04f0d35698acad85c3c05bc72 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Mon, 17 Aug 2026 20:43:49 +0100 Subject: [PATCH 1/3] Add container info to sample --- docs/reference/rest_api.json | 52 ++++++++++++++++++- .../plugins/i15_1/i15_1_converter.py | 23 +++++--- src/daq_queuing_service/task_queue/task.py | 11 ++++ 3 files changed, 77 insertions(+), 9 deletions(-) diff --git a/docs/reference/rest_api.json b/docs/reference/rest_api.json index 48a1ce6..72f116e 100644 --- a/docs/reference/rest_api.json +++ b/docs/reference/rest_api.json @@ -859,6 +859,36 @@ ], "title": "CallStatus" }, + "Container": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "positionInParent": { + "$ref": "#/components/schemas/ContainerPosition" + } + }, + "type": "object", + "required": [ + "id", + "positionInParent" + ], + "title": "Container" + }, + "ContainerPosition": { + "properties": { + "position": { + "type": "integer", + "title": "Position" + } + }, + "type": "object", + "required": [ + "position" + ], + "title": "ContainerPosition" + }, "ConverterConfig": { "properties": { "path": { @@ -1166,12 +1196,22 @@ "tiled_service_account_check": { "type": "string", "title": "Tiled Service Account Check" + }, + "submit_task_check": { + "type": "string", + "title": "Submit Task Check" + }, + "admin_check": { + "type": "string", + "title": "Admin Check" } }, "additionalProperties": false, "type": "object", "required": [ - "tiled_service_account_check" + "tiled_service_account_check", + "submit_task_check", + "admin_check" ], "title": "OpaConfig" }, @@ -1274,13 +1314,21 @@ "additionalProperties": true, "type": "object", "title": "Data" + }, + "container": { + "$ref": "#/components/schemas/Container" + }, + "positionInContainer": { + "$ref": "#/components/schemas/ContainerPosition" } }, "type": "object", "required": [ "name", "id", - "data" + "data", + "container", + "positionInContainer" ], "title": "Sample" }, diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index bd82c4c..6192093 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -2,7 +2,7 @@ from blueapi.service.model import TaskRequest from tiled.client import from_uri # type: ignore -from tiled.client.container import Container +from tiled.client.container import Container as TiledContainer from daq_queuing_service.blueapi_interaction.blueapi_call import BlueapiCall from daq_queuing_service.log import LOGGER @@ -10,6 +10,8 @@ from daq_queuing_service.plugins.i15_1.backgrounds import BackgroundInfo from daq_queuing_service.plugins.i15_1.tiled_interaction import get_background_tiled_id from daq_queuing_service.task_queue.task import ( + Container, + ContainerPosition, Experiment, ExperimentDefinition, Sample, @@ -22,7 +24,9 @@ class I151Converter(Converter): def __init__(self): - self.tiled_client: Container = from_uri("https://tiled.diamond.ac.uk/api/v1") + self.tiled_client: TiledContainer = from_uri( + "https://tiled.diamond.ac.uk/api/v1" + ) def pre_process( self, @@ -38,7 +42,6 @@ def construct_blueapi_calls( history: list[TaskWithPosition], call_history: list[BlueapiCall], ) -> list[BlueapiCall]: - call_list: list[BlueapiCall] = [] for task in queue: @@ -66,9 +69,8 @@ def _construct_blueapi_tasks_from_experiment( self, experiment: Experiment, ) -> list[TaskRequest]: - sample_name = experiment.sample.name - # Assume sample name is of form test_8_1 to load from position 8 on puck 1 - _, position, puck = sample_name.split("_") + position = experiment.sample.positionInContainer.position + puck = experiment.sample.container.positionInParent.position # For air calibration scans, we need to not to robot load/unload. # https://github.com/DiamondLightSource/daq-queuing-service/issues/83 @@ -179,11 +181,18 @@ def _construct_background_experiment( self, background: BackgroundInfo, instrument_session: str ) -> Experiment: LOGGER.debug(f"Constructing experiment for background: {background}") + container_position = ContainerPosition(position=1) return Experiment( name=BACKGROUND_SCAN, instrument_session=instrument_session, # Need to get sample info for test samples (air, empty capillary etc) - sample=Sample(name="fq_1_1", id="", data={}), + sample=Sample( + name="fq_1_1", + id="", + data={}, + container=Container(id="", positionInParent=container_position), + positionInContainer=container_position, + ), experiment_definition=ExperimentDefinition( name="background_scan", id="", data={"background": background} ), diff --git a/src/daq_queuing_service/task_queue/task.py b/src/daq_queuing_service/task_queue/task.py index 016a187..c76588b 100644 --- a/src/daq_queuing_service/task_queue/task.py +++ b/src/daq_queuing_service/task_queue/task.py @@ -12,10 +12,21 @@ ) +class ContainerPosition(BaseModel): + position: int + + +class Container(BaseModel): + id: str + positionInParent: ContainerPosition # noqa: N815 + + class Sample(BaseModel): name: str id: str data: dict[str, Any] + container: Container + positionInContainer: ContainerPosition # noqa: N815 class ExperimentDefinition(BaseModel): From 9a22f1f85b489a24c6f298e0f3394f1e9ab05cd9 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Tue, 18 Aug 2026 09:14:18 +0100 Subject: [PATCH 2/3] Add container info to test samples --- tests/unit_tests/test_queue.py | 93 ++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 11 deletions(-) diff --git a/tests/unit_tests/test_queue.py b/tests/unit_tests/test_queue.py index c78da08..6cc2086 100644 --- a/tests/unit_tests/test_queue.py +++ b/tests/unit_tests/test_queue.py @@ -29,6 +29,8 @@ TaskNotFoundError, ) from daq_queuing_service.task_queue.task import ( + Container, + ContainerPosition, Experiment, ExperimentDefinition, Sample, @@ -39,6 +41,9 @@ pytest_plugins = ("pytest_asyncio",) +CONTAINER_POSITION = ContainerPosition(position=2) +CONTAINER = Container(id="", positionInParent=CONTAINER_POSITION) + def make_new_task(id_str: str): return Task( @@ -51,7 +56,13 @@ def make_new_task(id_str: str): id=id_str, data={}, ), - sample=Sample(name="test_sample", id=id_str, data={}), + sample=Sample( + name="test_sample", + id=id_str, + data={}, + positionInContainer=CONTAINER_POSITION, + container=CONTAINER, + ), ), ) @@ -286,7 +297,13 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="2", data={} ), - sample=Sample(name="test_8_2", id="2", data={}), + sample=Sample( + name="test_8_2", + id="2", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="2", status=Status.IN_PROGRESS, @@ -312,7 +329,13 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="3", data={} ), - sample=Sample(name="test_8_3", id="3", data={}), + sample=Sample( + name="test_8_3", + id="3", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="3", status=Status.QUEUED, @@ -338,7 +361,13 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="4", data={} ), - sample=Sample(name="test_8_4", id="4", data={}), + sample=Sample( + name="test_8_4", + id="4", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="4", status=Status.QUEUED, @@ -373,7 +402,13 @@ async def test_get_history_only_returns_tasks_in_history( experiment_definition=ExperimentDefinition( name="test", id="0", data={} ), - sample=Sample(name="test_8_0", id="0", data={}), + sample=Sample( + name="test_8_0", + id="0", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="0", status=Status.ERROR, @@ -405,7 +440,13 @@ async def test_get_history_only_returns_tasks_in_history( experiment_definition=ExperimentDefinition( name="test", id="1", data={} ), - sample=Sample(name="test_8_1", id="1", data={}), + sample=Sample( + name="test_8_1", + id="1", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="1", status=Status.COMPLETE, @@ -441,7 +482,13 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="0", data={} ), - sample=Sample(name="test_8_0", id="0", data={}), + sample=Sample( + name="test_8_0", + id="0", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="0", status=Status.ERROR, @@ -473,7 +520,13 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="1", data={} ), - sample=Sample(name="test_8_1", id="1", data={}), + sample=Sample( + name="test_8_1", + id="1", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="1", status=Status.COMPLETE, @@ -499,7 +552,13 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="2", data={} ), - sample=Sample(name="test_8_2", id="2", data={}), + sample=Sample( + name="test_8_2", + id="2", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="2", status=Status.IN_PROGRESS, @@ -525,7 +584,13 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="3", data={} ), - sample=Sample(name="test_8_3", id="3", data={}), + sample=Sample( + name="test_8_3", + id="3", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="3", status=Status.QUEUED, @@ -551,7 +616,13 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="4", data={} ), - sample=Sample(name="test_8_4", id="4", data={}), + sample=Sample( + name="test_8_4", + id="4", + data={}, + container=CONTAINER, + positionInContainer=CONTAINER_POSITION, + ), ), id="4", status=Status.QUEUED, From 85711844e8d4be3214c955d367daa4c0a9ec45c1 Mon Sep 17 00:00:00 2001 From: Dominic Oram Date: Tue, 18 Aug 2026 10:30:17 +0000 Subject: [PATCH 3/3] Fix unit tests --- tests/unit_tests/__init__.py | 0 tests/unit_tests/conftest.py | 18 ++- tests/unit_tests/plugins/__init__.py | 0 tests/unit_tests/plugins/i15_1/__init__.py | 0 .../plugins/{i15-1 => i15_1}/conftest.py | 0 .../test_get_background_tiled_id.py | 0 .../{i15-1 => i15_1}/test_i15_1_converter.py | 66 ++++++++-- tests/unit_tests/plugins/test_converter.py | 5 +- tests/unit_tests/test_api.py | 116 ++++++++++++++++-- tests/unit_tests/test_queue.py | 96 ++------------- 10 files changed, 191 insertions(+), 110 deletions(-) create mode 100644 tests/unit_tests/__init__.py create mode 100644 tests/unit_tests/plugins/__init__.py create mode 100644 tests/unit_tests/plugins/i15_1/__init__.py rename tests/unit_tests/plugins/{i15-1 => i15_1}/conftest.py (100%) rename tests/unit_tests/plugins/{i15-1 => i15_1}/test_get_background_tiled_id.py (100%) rename tests/unit_tests/plugins/{i15-1 => i15_1}/test_i15_1_converter.py (86%) diff --git a/tests/unit_tests/__init__.py b/tests/unit_tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py index 77f2989..afd738b 100644 --- a/tests/unit_tests/conftest.py +++ b/tests/unit_tests/conftest.py @@ -9,6 +9,8 @@ from daq_queuing_service.plugins.converter import Converter from daq_queuing_service.task_queue.queue import TaskQueue from daq_queuing_service.task_queue.task import ( + Container, + ContainerPosition, Experiment, ExperimentDefinition, Sample, @@ -24,6 +26,20 @@ def propagate_logs(monkeypatch: MonkeyPatch): monkeypatch.setattr(LOGGER, "propagate", True) +CONTAINER_POSITION = ContainerPosition(position=2) +CONTAINER = Container(id="", positionInParent=CONTAINER_POSITION) + + +def make_sample(name: str, id: str): + return Sample( + name=name, + id=id, + data={}, + positionInContainer=CONTAINER_POSITION, + container=CONTAINER, + ) + + @pytest.fixture def tasks() -> list[Task]: return [ @@ -34,7 +50,7 @@ def tasks() -> list[Task]: experiment_definition=ExperimentDefinition( name="test", id=str(i), data={} ), - sample=Sample(name=f"test_8_{i}", id=str(i), data={}), + sample=make_sample(f"test_8_{i}", str(i)), ), id=str(i), ) diff --git a/tests/unit_tests/plugins/__init__.py b/tests/unit_tests/plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit_tests/plugins/i15_1/__init__.py b/tests/unit_tests/plugins/i15_1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit_tests/plugins/i15-1/conftest.py b/tests/unit_tests/plugins/i15_1/conftest.py similarity index 100% rename from tests/unit_tests/plugins/i15-1/conftest.py rename to tests/unit_tests/plugins/i15_1/conftest.py diff --git a/tests/unit_tests/plugins/i15-1/test_get_background_tiled_id.py b/tests/unit_tests/plugins/i15_1/test_get_background_tiled_id.py similarity index 100% rename from tests/unit_tests/plugins/i15-1/test_get_background_tiled_id.py rename to tests/unit_tests/plugins/i15_1/test_get_background_tiled_id.py diff --git a/tests/unit_tests/plugins/i15-1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py similarity index 86% rename from tests/unit_tests/plugins/i15-1/test_i15_1_converter.py rename to tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index 282c368..b972cae 100644 --- a/tests/unit_tests/plugins/i15-1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -11,13 +11,14 @@ from daq_queuing_service.task_queue.task import ( Experiment, ExperimentDefinition, - Sample, Status, Task, TaskKind, TaskWithPosition, ) +from ...conftest import make_sample + def assert_tasks_equal(task1: Task | TaskWithPosition, task2: Task | TaskWithPosition): # Check two tasks are equal other than the generated UUID @@ -73,20 +74,20 @@ def test_given_sample_name_in_correct_format_then_correct_sample_loaded(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition(name=" ", id="", data={}), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment) assert tasks[0].name == "robot_load" - assert tasks[0].params["position"] == "8" - assert tasks[0].params["puck"] == "1" + assert tasks[0].params["position"] == 2 + assert tasks[0].params["puck"] == 2 def test_sample_centre_uses_expected_params(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition(name=" ", id="", data={}), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment) @@ -98,7 +99,7 @@ def test_sample_centre_uses_expected_params(): "exposure_time": 0.01, "metadata": { "experiment_definition": ExperimentDefinition(name=" ", id="", data={}), - "sample": Sample(name="test_8_1", id="", data={}), + "sample": make_sample("test_8_1", ""), }, } @@ -107,7 +108,7 @@ def test_session_and_number_of_tasks_per_experiment_is_expected(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition(name=" ", id="", data={}), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment) @@ -122,7 +123,7 @@ def test_experiment_with_correct_experiment_type_are_converted(): experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={} ), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) task = TaskWithPosition( @@ -143,7 +144,7 @@ def test_mix_of_experiments_with_correct_experiment_type_are_converted(): experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={} ), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) good_task = TaskWithPosition( @@ -176,7 +177,7 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={} ), - sample=Sample(name="test_8_1", id="", data={}), + sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", ) task = Task( @@ -190,7 +191,20 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( "experiment": { "name": "Background", "instrument_session": "cm12345-1", - "sample": {"name": "fq_1_1", "id": "", "data": {}}, + "sample": { + "name": "fq_1_1", + "id": "", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 1, + }, + }, + "positionInContainer": { + "position": 1, + }, + }, "experiment_definition": { "name": "background_scan", "id": "", @@ -270,7 +284,20 @@ def test_same_experiment_in_different_instrument_sessions_will_add_background_in "experiment": { "name": "Background", "instrument_session": "", - "sample": {"name": "fq_1_1", "id": "", "data": {}}, + "sample": { + "name": "fq_1_1", + "id": "", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 1, + }, + }, + "positionInContainer": { + "position": 1, + }, + }, "experiment_definition": { "name": "background_scan", "id": "", @@ -287,7 +314,20 @@ def test_same_experiment_in_different_instrument_sessions_will_add_background_in "experiment": { "name": "Background", "instrument_session": "different", - "sample": {"name": "fq_1_1", "id": "", "data": {}}, + "sample": { + "name": "fq_1_1", + "id": "", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 1, + }, + }, + "positionInContainer": { + "position": 1, + }, + }, "experiment_definition": { "name": "background_scan", "id": "", diff --git a/tests/unit_tests/plugins/test_converter.py b/tests/unit_tests/plugins/test_converter.py index 73d8bb8..fdbc43b 100644 --- a/tests/unit_tests/plugins/test_converter.py +++ b/tests/unit_tests/plugins/test_converter.py @@ -9,11 +9,12 @@ from daq_queuing_service.task_queue.task import ( Experiment, ExperimentDefinition, - Sample, Task, TaskWithPosition, ) +from ..conftest import make_sample + def test_get_converter_returns_converter_from_path_and_name(): converter = get_converter("daq_queuing_service.plugins.converter", "Converter") @@ -36,7 +37,7 @@ def test_default_converter_raises_error_when_converting_ulims_experiment(): id="", data={"time": 10}, ), - sample=Sample(name="test_sample", id="test_sample", data={}), + sample=make_sample("test_sample", "test_sample"), ) ) diff --git a/tests/unit_tests/test_api.py b/tests/unit_tests/test_api.py index 5882c7a..289f3da 100644 --- a/tests/unit_tests/test_api.py +++ b/tests/unit_tests/test_api.py @@ -137,7 +137,13 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_2", "id": "2", "data": {}}, + "sample": { + "name": "test_8_2", + "id": "2", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "2", "data": {}}, }, "id": "2", @@ -165,7 +171,13 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_3", "id": "3", "data": {}}, + "sample": { + "name": "test_8_3", + "id": "3", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "3", "data": {}}, }, "id": "3", @@ -193,7 +205,13 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_4", "id": "4", "data": {}}, + "sample": { + "name": "test_8_4", + "id": "4", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "4", "data": {}}, }, "id": "4", @@ -228,7 +246,13 @@ def test_get_queued_tasks_can_filter_by_task_status(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_2", "id": "2", "data": {}}, + "sample": { + "name": "test_8_2", + "id": "2", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "2", "data": {}}, }, "id": "2", @@ -273,7 +297,13 @@ async def test_get_all_tasks_can_filter_by_task_status(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_1", "id": "1", "data": {}}, + "sample": { + "name": "test_8_1", + "id": "1", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "1", "data": {}}, }, "id": "1", @@ -583,7 +613,13 @@ async def test_cancel_tasks_removes_task_from_queue_and_returns_tasks( "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_3", "id": "3", "data": {}}, + "sample": { + "name": "test_8_3", + "id": "3", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "3", "data": {}}, }, "id": "3", @@ -611,7 +647,13 @@ async def test_cancel_tasks_removes_task_from_queue_and_returns_tasks( "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_4", "id": "4", "data": {}}, + "sample": { + "name": "test_8_4", + "id": "4", + "data": {}, + "container": {"id": "", "positionInParent": {"position": 2}}, + "positionInContainer": {"position": 2}, + }, "experiment_definition": {"name": "test", "id": "4", "data": {}}, }, "id": "4", @@ -711,7 +753,20 @@ async def test_cancel_all_tasks_removes_all_queued_tasks_from_queue_and_returns_ "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_3", "id": "3", "data": {}}, + "sample": { + "name": "test_8_3", + "id": "3", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 2, + }, + }, + "positionInContainer": { + "position": 2, + }, + }, "experiment_definition": {"name": "test", "id": "3", "data": {}}, }, "id": "3", @@ -739,7 +794,20 @@ async def test_cancel_all_tasks_removes_all_queued_tasks_from_queue_and_returns_ "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_4", "id": "4", "data": {}}, + "sample": { + "name": "test_8_4", + "id": "4", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 2, + }, + }, + "positionInContainer": { + "position": 2, + }, + }, "experiment_definition": {"name": "test", "id": "4", "data": {}}, }, "id": "4", @@ -773,7 +841,20 @@ def test_get_task_by_position_returns_expected_task(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_3", "id": "3", "data": {}}, + "sample": { + "name": "test_8_3", + "id": "3", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 2, + }, + }, + "positionInContainer": { + "position": 2, + }, + }, "experiment_definition": {"name": "test", "id": "3", "data": {}}, }, "id": "3", @@ -806,7 +887,20 @@ def test_get_task_by_id_returns_expected_task(test_client: TestClient): "experiment": { "name": "test_experiment", "instrument_session": "", - "sample": {"name": "test_8_3", "id": "3", "data": {}}, + "sample": { + "name": "test_8_3", + "id": "3", + "data": {}, + "container": { + "id": "", + "positionInParent": { + "position": 2, + }, + }, + "positionInContainer": { + "position": 2, + }, + }, "experiment_definition": {"name": "test", "id": "3", "data": {}}, }, "id": "3", diff --git a/tests/unit_tests/test_queue.py b/tests/unit_tests/test_queue.py index 6cc2086..0c2fe6c 100644 --- a/tests/unit_tests/test_queue.py +++ b/tests/unit_tests/test_queue.py @@ -29,20 +29,16 @@ TaskNotFoundError, ) from daq_queuing_service.task_queue.task import ( - Container, - ContainerPosition, Experiment, ExperimentDefinition, - Sample, Status, Task, TaskKind, ) -pytest_plugins = ("pytest_asyncio",) +from .conftest import make_sample -CONTAINER_POSITION = ContainerPosition(position=2) -CONTAINER = Container(id="", positionInParent=CONTAINER_POSITION) +pytest_plugins = ("pytest_asyncio",) def make_new_task(id_str: str): @@ -56,13 +52,7 @@ def make_new_task(id_str: str): id=id_str, data={}, ), - sample=Sample( - name="test_sample", - id=id_str, - data={}, - positionInContainer=CONTAINER_POSITION, - container=CONTAINER, - ), + sample=make_sample("test_sample", id_str), ), ) @@ -297,13 +287,7 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="2", data={} ), - sample=Sample( - name="test_8_2", - id="2", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_2", "2"), ), id="2", status=Status.IN_PROGRESS, @@ -329,13 +313,7 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="3", data={} ), - sample=Sample( - name="test_8_3", - id="3", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_3", "3"), ), id="3", status=Status.QUEUED, @@ -361,13 +339,7 @@ async def test_get_queue_only_returns_tasks_in_queue( experiment_definition=ExperimentDefinition( name="test", id="4", data={} ), - sample=Sample( - name="test_8_4", - id="4", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_4", "4"), ), id="4", status=Status.QUEUED, @@ -402,13 +374,7 @@ async def test_get_history_only_returns_tasks_in_history( experiment_definition=ExperimentDefinition( name="test", id="0", data={} ), - sample=Sample( - name="test_8_0", - id="0", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_0", "0"), ), id="0", status=Status.ERROR, @@ -440,13 +406,7 @@ async def test_get_history_only_returns_tasks_in_history( experiment_definition=ExperimentDefinition( name="test", id="1", data={} ), - sample=Sample( - name="test_8_1", - id="1", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_1", "1"), ), id="1", status=Status.COMPLETE, @@ -482,13 +442,7 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="0", data={} ), - sample=Sample( - name="test_8_0", - id="0", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_0", "0"), ), id="0", status=Status.ERROR, @@ -520,13 +474,7 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="1", data={} ), - sample=Sample( - name="test_8_1", - id="1", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_1", "1"), ), id="1", status=Status.COMPLETE, @@ -552,13 +500,7 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="2", data={} ), - sample=Sample( - name="test_8_2", - id="2", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_2", "2"), ), id="2", status=Status.IN_PROGRESS, @@ -584,13 +526,7 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="3", data={} ), - sample=Sample( - name="test_8_3", - id="3", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_3", "3"), ), id="3", status=Status.QUEUED, @@ -616,13 +552,7 @@ async def test_get_tasks_returns_tasks_in_queue_and_history( experiment_definition=ExperimentDefinition( name="test", id="4", data={} ), - sample=Sample( - name="test_8_4", - id="4", - data={}, - container=CONTAINER, - positionInContainer=CONTAINER_POSITION, - ), + sample=make_sample("test_8_4", "4"), ), id="4", status=Status.QUEUED,