Skip to content

Commit 906bba0

Browse files
committed
Add SPA processing parameters GET endpoint to prod server API
1 parent 2c4fd59 commit 906bba0

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

src/murfey/server/api/__init__.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,61 @@ def increment_rsync_transferred_files_prometheus(
396396
).inc(rsyncer_info.data_bytes)
397397

398398

399+
class ProcessingDetails(BaseModel):
400+
data_collection_group: DataCollectionGroup
401+
data_collections: List[DataCollection]
402+
processing_jobs: List[ProcessingJob]
403+
relion_params: SPARelionParameters
404+
feedback_params: SPAFeedbackParameters
405+
406+
407+
@router.get("/sessions/{session_id}/spa_processing_parameters")
408+
def get_spa_proc_param_details(
409+
session_id: MurfeySessionID, db=murfey_db
410+
) -> Optional[List[ProcessingDetails]]:
411+
params = db.exec(
412+
select(
413+
DataCollectionGroup,
414+
DataCollection,
415+
ProcessingJob,
416+
SPARelionParameters,
417+
SPAFeedbackParameters,
418+
)
419+
.where(DataCollectionGroup.session_id == session_id)
420+
.where(DataCollectionGroup.id == DataCollection.dcg_id)
421+
.where(DataCollection.id == ProcessingJob.dc_id)
422+
.where(SPARelionParameters.pj_id == ProcessingJob.id)
423+
.where(SPAFeedbackParameters.pj_id == ProcessingJob.id)
424+
).all()
425+
if not params:
426+
return None
427+
unique_dcg_indices = []
428+
dcg_ids = []
429+
for i, p in enumerate(params):
430+
if p[0].id not in dcg_ids:
431+
dcg_ids.append(p[0].id)
432+
unique_dcg_indices.append(i)
433+
434+
def _parse(ps, i, dcg_id):
435+
res = []
436+
for p in ps:
437+
if p[0].id == dcg_id:
438+
if p[i] not in res:
439+
res.append(p[i])
440+
return res
441+
442+
return [
443+
ProcessingDetails(
444+
data_collection_group=params[i][0],
445+
data_collections=_parse(params, 1, d),
446+
processing_jobs=_parse(params, 2, d),
447+
relion_params=_parse(params, 3, d)[0],
448+
feedback_params=_parse(params, 4, d)[0],
449+
)
450+
for i, d in zip(unique_dcg_indices, dcg_ids)
451+
]
452+
453+
399454
@router.post("/sessions/{session_id}/spa_processing_parameters")
400455
def register_spa_proc_params(
401456
session_id: MurfeySessionID, proc_params: ProcessingParametersSPA, db=murfey_db

0 commit comments

Comments
 (0)