Skip to content

Commit 2a05d27

Browse files
committed
Merged 0.16.6 changes from 'main' branch
2 parents 84d933e + 153719e commit 2a05d27

File tree

9 files changed

+71
-51
lines changed

9 files changed

+71
-51
lines changed

.bumpclient.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tool.bumpversion]
2-
current_version = "0.16.5"
2+
current_version = "0.16.6"
33
commit = true
44
tag = false
55

.bumpversion.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tool.bumpversion]
2-
current_version = "0.16.5"
2+
current_version = "0.16.6"
33
commit = true
44
tag = true
55

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ requires = [
77

88
[project]
99
name = "murfey"
10-
version = "0.16.5"
10+
version = "0.16.6"
1111
description = "Client-Server architecture hauling Cryo-EM data"
1212
readme = "README.md"
1313
keywords = [

src/murfey/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
from __future__ import annotations
22

3-
__version__ = "0.16.5"
4-
__supported_client_version__ = "0.16.5"
3+
__version__ = "0.16.6"
4+
__supported_client_version__ = "0.16.6"

src/murfey/client/contexts/spa_metadata.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ def post_transfer(
162162
}
163163
capture_post(url, json=dcg_data)
164164
gs_pix_positions = get_grid_square_atlas_positions(
165-
_atlas_destination(environment, source, transferred_file)
166-
/ environment.samples[source].atlas
165+
source_visit_dir / environment.visit / partial_path
167166
)
168167
for gs, pos_data in gs_pix_positions.items():
169168
if pos_data:
@@ -181,7 +180,11 @@ def post_transfer(
181180
},
182181
)
183182

184-
elif transferred_file.suffix == ".dm" and environment:
183+
elif (
184+
transferred_file.suffix == ".dm"
185+
and transferred_file.name.startswith("GridSquare")
186+
and environment
187+
):
185188
gs_name = transferred_file.stem.split("_")[1]
186189
fh_positions = _foil_hole_positions(transferred_file, int(gs_name))
187190
source = _get_source(transferred_file, environment=environment)

src/murfey/server/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2948,7 +2948,12 @@ def feedback_callback(header: dict, message: dict) -> None:
29482948
else:
29492949
# Send it directly to DLQ without trying to rerun it
29502950
_transport_object.transport.nack(header, requeue=False)
2951+
if not result:
2952+
logger.error(
2953+
f"Workflow {sanitise(message['register'])} returned {result}"
2954+
)
29512955
return None
2956+
logger.error(f"No workflow found for {sanitise(message['register'])}")
29522957
if _transport_object:
29532958
_transport_object.transport.nack(header, requeue=False)
29542959
return None

src/murfey/server/api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ def flush_spa_processing(
579579
visit_name: str, session_id: MurfeySessionID, tag: Tag, db=murfey_db
580580
):
581581
zocalo_message = {
582-
"register": "flush_spa_preprocess",
582+
"register": "spa.flush_spa_preprocess",
583583
"session_id": session_id,
584584
"tag": tag.tag,
585585
}

src/murfey/util/spa_metadata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ def foil_hole_data(xml_path: Path, foil_hole: int, grid_square: int) -> FoilHole
157157
serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][
158158
"a:m_serializationArray"
159159
]
160+
if len(serialization_array.keys()) == 0:
161+
return FoilHoleInfo(id=foil_hole, grid_square_id=grid_square)
160162
for key in serialization_array.keys():
161163
if key.startswith("b:KeyValuePairOfintTargetLocation"):
162164
required_key = key

src/murfey/workflows/spa/flush_spa_preprocess.py

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,19 @@
99

1010
from murfey.server import _murfey_id, _transport_object, sanitise
1111
from murfey.server.api.auth import MurfeySessionID
12-
from murfey.server.murfey_db import murfey_db
1312
from murfey.util.config import get_machine_config, get_microscope
14-
from murfey.util.db import DataCollectionGroup, FoilHole, GridSquare
13+
from murfey.util.db import (
14+
AutoProcProgram,
15+
DataCollection,
16+
DataCollectionGroup,
17+
FoilHole,
18+
GridSquare,
19+
Movie,
20+
PreprocessStash,
21+
ProcessingJob,
22+
)
23+
from murfey.util.db import Session as MurfeySession
24+
from murfey.util.db import SPAFeedbackParameters, SPARelionParameters
1525
from murfey.util.models import FoilHoleParameters, GridSquareParameters
1626
from murfey.util.processing_params import default_spa_parameters
1727
from murfey.util.spa_metadata import (
@@ -30,10 +40,10 @@ def register_grid_square(
3040
session_id: MurfeySessionID,
3141
gsid: int,
3242
grid_square_params: GridSquareParameters,
33-
db=murfey_db,
43+
murfey_db: Session,
3444
):
3545
try:
36-
grid_square = db.exec(
46+
grid_square = murfey_db.exec(
3747
select(GridSquare)
3848
.where(GridSquare.name == gsid)
3949
.where(GridSquare.tag == grid_square_params.tag)
@@ -51,7 +61,7 @@ def register_grid_square(
5161
_transport_object.do_update_grid_square(grid_square.id, grid_square_params)
5262
except Exception:
5363
if _transport_object:
54-
dcg = db.exec(
64+
dcg = murfey_db.exec(
5565
select(DataCollectionGroup)
5666
.where(DataCollectionGroup.session_id == session_id)
5767
.where(DataCollectionGroup.tag == grid_square_params.tag)
@@ -90,19 +100,19 @@ def register_grid_square(
90100
pixel_size=grid_square_params.pixel_size,
91101
image=secured_grid_square_image_path,
92102
)
93-
db.add(grid_square)
94-
db.commit()
95-
db.close()
103+
murfey_db.add(grid_square)
104+
murfey_db.commit()
105+
murfey_db.close()
96106

97107

98108
def register_foil_hole(
99109
session_id: MurfeySessionID,
100110
gs_name: int,
101111
foil_hole_params: FoilHoleParameters,
102-
db=murfey_db,
112+
murfey_db: Session,
103113
):
104114
try:
105-
gs = db.exec(
115+
gs = murfey_db.exec(
106116
select(GridSquare)
107117
.where(GridSquare.tag == foil_hole_params.tag)
108118
.where(GridSquare.session_id == session_id)
@@ -120,7 +130,7 @@ def register_foil_hole(
120130
else:
121131
jpeg_size = (0, 0)
122132
try:
123-
foil_hole = db.exec(
133+
foil_hole = murfey_db.exec(
124134
select(FoilHole)
125135
.where(FoilHole.name == foil_hole_params.name)
126136
.where(FoilHole.grid_square_id == gsid)
@@ -180,9 +190,9 @@ def register_foil_hole(
180190
pixel_size=foil_hole_params.pixel_size,
181191
image=secured_foil_hole_image_path,
182192
)
183-
db.add(foil_hole)
184-
db.commit()
185-
db.close()
193+
murfey_db.add(foil_hole)
194+
murfey_db.commit()
195+
murfey_db.close()
186196

187197

188198
def _grid_square_metadata_file(f: Path, grid_square: int) -> Optional[Path]:
@@ -198,11 +208,11 @@ def _grid_square_metadata_file(f: Path, grid_square: int) -> Optional[Path]:
198208

199209

200210
def _flush_position_analysis(
201-
movie_path: Path, dcg_id: int, session_id: int, db: Session
211+
movie_path: Path, dcg_id: int, session_id: int, murfey_db: Session
202212
) -> Optional[int]:
203213
"""Register a grid square and foil hole in the database"""
204214
data_collection_group = murfey_db.exec(
205-
select(db.DataCollectionGroup).where(db.DataCollectionGroup.id == dcg_id)
215+
select(DataCollectionGroup).where(DataCollectionGroup.id == dcg_id)
206216
).one()
207217

208218
# Work out the grid square and associated metadata file
@@ -281,17 +291,19 @@ def _flush_position_analysis(
281291
return foil_hole
282292

283293

284-
def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False):
294+
def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) -> bool:
285295
session_id = message["session_id"]
286296
stashed_files = murfey_db.exec(
287-
select(db.PreprocessStash)
288-
.where(db.PreprocessStash.session_id == session_id)
289-
.where(db.PreprocessStash.tag == message["tag"])
297+
select(PreprocessStash)
298+
.where(PreprocessStash.session_id == session_id)
299+
.where(PreprocessStash.tag == message["tag"])
290300
).all()
291301
if not stashed_files:
292-
return None
302+
return True
293303
instrument_name = (
294-
murfey_db.exec(select(db.Session).where(db.Session.id == message["session_id"]))
304+
murfey_db.exec(
305+
select(MurfeySession).where(MurfeySession.id == message["session_id"])
306+
)
295307
.one()
296308
.instrument_name
297309
)
@@ -301,32 +313,30 @@ def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False):
301313
recipe_name = machine_config.recipes.get("em-spa-preprocess", "em-spa-preprocess")
302314
collected_ids = murfey_db.exec(
303315
select(
304-
db.DataCollectionGroup,
305-
db.DataCollection,
306-
db.ProcessingJob,
307-
db.AutoProcProgram,
316+
DataCollectionGroup,
317+
DataCollection,
318+
ProcessingJob,
319+
AutoProcProgram,
308320
)
309-
.where(db.DataCollectionGroup.session_id == session_id)
310-
.where(db.DataCollectionGroup.tag == message["tag"])
311-
.where(db.DataCollection.dcg_id == db.DataCollectionGroup.id)
312-
.where(db.ProcessingJob.dc_id == db.DataCollection.id)
313-
.where(db.AutoProcProgram.pj_id == db.ProcessingJob.id)
314-
.where(db.ProcessingJob.recipe == recipe_name)
321+
.where(DataCollectionGroup.session_id == session_id)
322+
.where(DataCollectionGroup.tag == message["tag"])
323+
.where(DataCollection.dcg_id == DataCollectionGroup.id)
324+
.where(ProcessingJob.dc_id == DataCollection.id)
325+
.where(AutoProcProgram.pj_id == ProcessingJob.id)
326+
.where(ProcessingJob.recipe == recipe_name)
315327
).one()
316328
params = murfey_db.exec(
317-
select(db.SPARelionParameters, db.SPAFeedbackParameters)
318-
.where(db.SPARelionParameters.pj_id == collected_ids[2].id)
319-
.where(db.SPAFeedbackParameters.pj_id == db.SPARelionParameters.pj_id)
329+
select(SPARelionParameters, SPAFeedbackParameters)
330+
.where(SPARelionParameters.pj_id == collected_ids[2].id)
331+
.where(SPAFeedbackParameters.pj_id == SPARelionParameters.pj_id)
320332
).one()
321333
proc_params = params[0]
322334
feedback_params = params[1]
323335
if not proc_params:
324336
logger.warning(
325337
f"No SPA processing parameters found for client processing job ID {collected_ids[2].id}"
326338
)
327-
raise ValueError(
328-
"No processing parameters were found in the database when flushing SPA preprocessing"
329-
)
339+
return False
330340

331341
murfey_ids = _murfey_id(
332342
collected_ids[3].id,
@@ -345,10 +355,10 @@ def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False):
345355
# Register grid square and foil hole if not present
346356
try:
347357
foil_hole_id = _flush_position_analysis(
348-
movie_path=f.file_path,
358+
movie_path=Path(f.file_path),
349359
dcg_id=collected_ids[0].id,
350360
session_id=session_id,
351-
db=db,
361+
murfey_db=murfey_db,
352362
)
353363
except Exception as e:
354364
logger.error(
@@ -361,7 +371,7 @@ def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False):
361371
ppath = Path(f.file_path)
362372
if not mrcp.parent.exists():
363373
mrcp.parent.mkdir(parents=True)
364-
movie = db.Movie(
374+
movie = Movie(
365375
murfey_id=murfey_ids[2 * i],
366376
path=f.file_path,
367377
image_number=f.image_number,
@@ -407,4 +417,4 @@ def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False):
407417
)
408418
murfey_db.commit()
409419
murfey_db.close()
410-
return None
420+
return True

0 commit comments

Comments
 (0)