Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 50 additions & 2 deletions docs/reference/rest_api.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down Expand Up @@ -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"
},
Expand Down Expand Up @@ -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"
},
Expand Down
23 changes: 16 additions & 7 deletions src/daq_queuing_service/plugins/i15_1/i15_1_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@

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
from daq_queuing_service.plugins.converter import Converter
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,
Expand All @@ -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,
Expand All @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Could change this to something more sensible now that we don't use it to work out the positon

id="",
data={},
container=Container(id="", positionInParent=container_position),
positionInContainer=container_position,
),
experiment_definition=ExperimentDefinition(
name="background_scan", id="", data={"background": background}
),
Expand Down
11 changes: 11 additions & 0 deletions src/daq_queuing_service/task_queue/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Empty file added tests/unit_tests/__init__.py
Empty file.
18 changes: 17 additions & 1 deletion tests/unit_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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 [
Expand All @@ -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),
)
Expand Down
Empty file.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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", ""),
},
}

Expand All @@ -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)
Expand All @@ -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(
Expand All @@ -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(
Expand Down Expand Up @@ -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(
Expand All @@ -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": "",
Expand Down Expand Up @@ -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": "",
Expand All @@ -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": "",
Expand Down
5 changes: 3 additions & 2 deletions tests/unit_tests/plugins/test_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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"),
)
)

Expand Down
Loading
Loading