Skip to content

Commit 76b43b6

Browse files
committed
Move workflow setup specific endpoints to their own router
1 parent 97b16c8 commit 76b43b6

File tree

7 files changed

+274
-218
lines changed

7 files changed

+274
-218
lines changed

src/murfey/server/api/__init__.py

Lines changed: 0 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import sqlalchemy
1212
from fastapi import APIRouter, Depends, Request
1313
from fastapi.responses import FileResponse, HTMLResponse
14-
from ispyb.sqlalchemy import Atlas
1514
from ispyb.sqlalchemy import AutoProcProgram as ISPyBAutoProcProgram
1615
from ispyb.sqlalchemy import (
1716
BLSample,
@@ -78,15 +77,12 @@
7877
BLSubSampleParameters,
7978
ClientInfo,
8079
CurrentGainRef,
81-
DCGroupParameters,
82-
DCParameters,
8380
FoilHoleParameters,
8481
FractionationParameters,
8582
GainReference,
8683
GridSquareParameters,
8784
MillingParameters,
8885
PostInfo,
89-
ProcessingJobParameters,
9086
ProcessingParametersSPA,
9187
ProcessingParametersTomo,
9288
RegistrationMessage,
@@ -1258,173 +1254,6 @@ def make_rsyncer_destination(session_id: int, destination: Dest, db=murfey_db):
12581254
return destination
12591255

12601256

1261-
@router.post("/visits/{visit_name}/{session_id}/register_data_collection_group")
1262-
def register_dc_group(
1263-
visit_name, session_id: MurfeySessionID, dcg_params: DCGroupParameters, db=murfey_db
1264-
):
1265-
ispyb_proposal_code = visit_name[:2]
1266-
ispyb_proposal_number = visit_name.split("-")[0][2:]
1267-
ispyb_visit_number = visit_name.split("-")[-1]
1268-
instrument_name = (
1269-
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
1270-
)
1271-
log.info(f"Registering data collection group on microscope {instrument_name}")
1272-
if dcg_murfey := db.exec(
1273-
select(DataCollectionGroup)
1274-
.where(DataCollectionGroup.session_id == session_id)
1275-
.where(DataCollectionGroup.tag == dcg_params.tag)
1276-
).all():
1277-
dcg_murfey[0].atlas = dcg_params.atlas
1278-
dcg_murfey[0].sample = dcg_params.sample
1279-
dcg_murfey[0].atlas_pixel_size = dcg_params.atlas_pixel_size
1280-
1281-
if _transport_object:
1282-
if dcg_murfey[0].atlas_id is not None:
1283-
_transport_object.send(
1284-
_transport_object.feedback_queue,
1285-
{
1286-
"register": "atlas_update",
1287-
"atlas_id": dcg_murfey[0].atlas_id,
1288-
"atlas": dcg_params.atlas,
1289-
"sample": dcg_params.sample,
1290-
"atlas_pixel_size": dcg_params.atlas_pixel_size,
1291-
},
1292-
)
1293-
else:
1294-
atlas_id_response = _transport_object.do_insert_atlas(
1295-
Atlas(
1296-
dataCollectionGroupId=dcg_murfey[0].id,
1297-
atlasImage=dcg_params.atlas,
1298-
pixelSize=dcg_params.atlas_pixel_size,
1299-
cassetteSlot=dcg_params.sample,
1300-
)
1301-
)
1302-
dcg_murfey[0].atlas_id = atlas_id_response["return_value"]
1303-
db.add(dcg_murfey[0])
1304-
db.commit()
1305-
else:
1306-
dcg_parameters = {
1307-
"start_time": str(datetime.datetime.now()),
1308-
"experiment_type": dcg_params.experiment_type,
1309-
"experiment_type_id": dcg_params.experiment_type_id,
1310-
"tag": dcg_params.tag,
1311-
"session_id": session_id,
1312-
"atlas": dcg_params.atlas,
1313-
"sample": dcg_params.sample,
1314-
"atlas_pixel_size": dcg_params.atlas_pixel_size,
1315-
}
1316-
1317-
if _transport_object:
1318-
_transport_object.send(
1319-
_transport_object.feedback_queue, {"register": "data_collection_group", **dcg_parameters, "microscope": instrument_name, "proposal_code": ispyb_proposal_code, "proposal_number": ispyb_proposal_number, "visit_number": ispyb_visit_number} # type: ignore
1320-
)
1321-
return dcg_params
1322-
1323-
1324-
@router.post("/visits/{visit_name}/{session_id}/start_data_collection")
1325-
def start_dc(
1326-
visit_name, session_id: MurfeySessionID, dc_params: DCParameters, db=murfey_db
1327-
):
1328-
ispyb_proposal_code = visit_name[:2]
1329-
ispyb_proposal_number = visit_name.split("-")[0][2:]
1330-
ispyb_visit_number = visit_name.split("-")[-1]
1331-
instrument_name = (
1332-
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
1333-
)
1334-
machine_config = get_machine_config(instrument_name=instrument_name)[
1335-
instrument_name
1336-
]
1337-
log.info(
1338-
f"Starting data collection on microscope {instrument_name!r} "
1339-
f"with basepath {sanitise(str(machine_config.rsync_basepath))} and directory {sanitise(dc_params.image_directory)}"
1340-
)
1341-
dc_parameters = {
1342-
"visit": visit_name,
1343-
"image_directory": str(
1344-
machine_config.rsync_basepath / dc_params.image_directory
1345-
),
1346-
"start_time": str(datetime.datetime.now()),
1347-
"voltage": dc_params.voltage,
1348-
"pixel_size": str(float(dc_params.pixel_size_on_image) * 1e9),
1349-
"image_suffix": dc_params.file_extension,
1350-
"experiment_type": dc_params.experiment_type,
1351-
"image_size_x": dc_params.image_size_x,
1352-
"image_size_y": dc_params.image_size_y,
1353-
"acquisition_software": dc_params.acquisition_software,
1354-
"tag": dc_params.tag,
1355-
"source": dc_params.source,
1356-
"magnification": dc_params.magnification,
1357-
"total_exposed_dose": dc_params.total_exposed_dose,
1358-
"c2aperture": dc_params.c2aperture,
1359-
"exposure_time": dc_params.exposure_time,
1360-
"slit_width": dc_params.slit_width,
1361-
"phase_plate": dc_params.phase_plate,
1362-
"session_id": session_id,
1363-
}
1364-
1365-
if _transport_object:
1366-
_transport_object.send(
1367-
_transport_object.feedback_queue,
1368-
{
1369-
"register": "data_collection",
1370-
**dc_parameters,
1371-
"microscope": instrument_name,
1372-
"proposal_code": ispyb_proposal_code,
1373-
"proposal_number": ispyb_proposal_number,
1374-
"visit_number": ispyb_visit_number,
1375-
},
1376-
)
1377-
if dc_params.exposure_time:
1378-
prom.exposure_time.set(dc_params.exposure_time)
1379-
return dc_params
1380-
1381-
1382-
@router.post("/visits/{visit_name}/{session_id}/register_processing_job")
1383-
def register_proc(
1384-
visit_name: str,
1385-
session_id: MurfeySessionID,
1386-
proc_params: ProcessingJobParameters,
1387-
db=murfey_db,
1388-
):
1389-
proc_parameters: dict = {
1390-
"session_id": session_id,
1391-
"experiment_type": proc_params.experiment_type,
1392-
"recipe": proc_params.recipe,
1393-
"source": proc_params.source,
1394-
"tag": proc_params.tag,
1395-
"job_parameters": {
1396-
k: v for k, v in proc_params.parameters.items() if v not in (None, "None")
1397-
},
1398-
}
1399-
1400-
session_processing_parameters = db.exec(
1401-
select(SessionProcessingParameters).where(
1402-
SessionProcessingParameters.session_id == session_id
1403-
)
1404-
).all()
1405-
1406-
if session_processing_parameters:
1407-
job_parameters: dict = proc_parameters["job_parameters"]
1408-
job_parameters.update(
1409-
{
1410-
"gain_ref": session_processing_parameters[0].gain_ref,
1411-
"dose_per_frame": session_processing_parameters[0].dose_per_frame,
1412-
"eer_fractionation_file": session_processing_parameters[
1413-
0
1414-
].eer_fractionation_file,
1415-
"symmetry": session_processing_parameters[0].symmetry,
1416-
}
1417-
)
1418-
proc_parameters["job_parameters"] = job_parameters
1419-
1420-
if _transport_object:
1421-
_transport_object.send(
1422-
_transport_object.feedback_queue,
1423-
{"register": "processing_job", **proc_parameters},
1424-
)
1425-
return proc_params
1426-
1427-
14281257
@router.post("/sessions/{session_id}/process_gain")
14291258
async def process_gain(
14301259
session_id: MurfeySessionID, gain_reference_params: GainReference, db=murfey_db

src/murfey/server/api/session_info.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
)
2525

2626
router = APIRouter(
27-
prefix="session_info", dependencies=[Depends(validate_token)], tags=["session info"]
27+
prefix="/session_info",
28+
dependencies=[Depends(validate_token)],
29+
tags=["session info"],
2830
)
2931

3032

@@ -156,7 +158,7 @@ async def get_clients(db=murfey_db):
156158

157159

158160
spa_router = APIRouter(
159-
prefix="session_info/spa",
161+
prefix="/session_info/spa",
160162
dependencies=[Depends(validate_token)],
161163
tags=["session info for SPA"],
162164
)
@@ -218,7 +220,7 @@ def _parse(ps, i, dcg_id):
218220

219221

220222
tomo_router = APIRouter(
221-
prefix="session_info/tomo",
223+
prefix="/session_info/tomo",
222224
dependencies=[Depends(validate_token)],
223225
tags=["session info for cryoET"],
224226
)

0 commit comments

Comments
 (0)