Skip to content

Commit 6bfade7

Browse files
committed
Workflow to change experiment type id
1 parent 6fe40c2 commit 6bfade7

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ GitHub = "https://github.com/DiamondLightSource/python-murfey"
109109
"clem.register_preprocessing_result" = "murfey.workflows.clem.register_preprocessing_results:run"
110110
"data_collection" = "murfey.workflows.register_data_collection:run"
111111
"data_collection_group" = "murfey.workflows.register_data_collection_group:run"
112+
"experiment_type_update" = "murfey.workflows.register_experiment_type_update:run"
112113
"pato" = "murfey.workflows.notifications:notification_setup"
113114
"picked_particles" = "murfey.workflows.spa.picking:particles_picked"
114115
"picked_tomogram" = "murfey.workflows.tomo.picking:picked_tomogram"

src/murfey/server/api/workflow.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,24 @@ def register_dc_group(
155155
session_id, sm.name, search_map_params, db, close_db=False
156156
)
157157
db.close()
158+
elif dcg_murfey := db.exec(
159+
select(DataCollectionGroup)
160+
.where(DataCollectionGroup.session_id == session_id)
161+
.where(DataCollectionGroup.atlas == dcg_params.atlas)
162+
).all():
163+
# Case where we switch from atlas to processing
164+
dcg_murfey[0].tag = dcg_params.tag or dcg_murfey[0].tag
165+
if _transport_object:
166+
_transport_object.send(
167+
_transport_object.feedback_queue,
168+
{
169+
"register": "experiment_type_update",
170+
"experiment_type_id": dcg_params.experiment_type_id,
171+
"dcgid": dcg_murfey[0].id,
172+
},
173+
)
174+
db.add(dcg_murfey[0])
175+
db.commit()
158176
else:
159177
dcg_parameters = {
160178
"start_time": str(datetime.now()),

src/murfey/server/ispyb.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,34 @@ def do_insert_data_collection_group(
137137
)
138138
return {"success": False, "return_value": None}
139139

140+
def do_update_data_collection_group(
141+
self,
142+
record: DataCollectionGroup,
143+
message=None,
144+
**kwargs,
145+
):
146+
try:
147+
with ISPyBSession() as db:
148+
dcg = (
149+
db.query(DataCollectionGroup)
150+
.filter(
151+
DataCollectionGroup.dataCollectionGroupId
152+
== record.dataCollectionGroupId
153+
)
154+
.one()
155+
)
156+
dcg.experimentTypeId = record.experimentTypeId
157+
db.add(dcg)
158+
db.commit()
159+
return {"success": True, "return_value": record.dataCollectionGroupId}
160+
except ispyb.ISPyBException as e:
161+
log.error(
162+
"Updating Data Collection Group entry caused exception '%s'.",
163+
e,
164+
exc_info=True,
165+
)
166+
return {"success": False, "return_value": None}
167+
140168
def do_insert_atlas(self, record: Atlas):
141169
try:
142170
with ISPyBSession() as db:
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import logging
2+
import time
3+
4+
import ispyb.sqlalchemy._auto_db_schema as ISPyBDB
5+
from sqlmodel.orm.session import Session as SQLModelSession
6+
7+
from murfey.server import _transport_object
8+
9+
logger = logging.getLogger("murfey.workflows.register_data_collection_group")
10+
11+
12+
def run(
13+
message: dict, murfey_db: SQLModelSession, demo: bool = False
14+
) -> dict[str, bool]:
15+
# Fail immediately if no transport wrapper is found
16+
if _transport_object is None:
17+
logger.error("Unable to find transport manager")
18+
return {"success": False, "requeue": False}
19+
20+
logger.info(f"Updating the experiment type for data collection group: \n{message}")
21+
22+
record = ISPyBDB.DataCollectionGroup(
23+
dataCollectionGroupId=message["dcgid"],
24+
experimentTypeId=message["experiment_type_id"],
25+
)
26+
dcgid = _transport_object.do_insert_data_collection_group(record).get(
27+
"return_value", None
28+
)
29+
30+
if dcgid is None:
31+
time.sleep(2)
32+
logger.error(
33+
"Failed to update the following data collection group: \n"
34+
f"{message} \n"
35+
"Requeuing message"
36+
)
37+
return {"success": False, "requeue": True}
38+
39+
return {"success": True}

0 commit comments

Comments
 (0)