From 664489cb3062429b786a5d79f6ea4a376c301dd5 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 22 Jan 2025 16:51:42 +0000 Subject: [PATCH 1/9] Flush functions need renaming --- src/murfey/server/api/__init__.py | 2 +- src/murfey/workflows/spa/flush_spa_preprocess.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/murfey/server/api/__init__.py b/src/murfey/server/api/__init__.py index 4873f81ef..7fa7048d1 100644 --- a/src/murfey/server/api/__init__.py +++ b/src/murfey/server/api/__init__.py @@ -579,7 +579,7 @@ def flush_spa_processing( visit_name: str, session_id: MurfeySessionID, tag: Tag, db=murfey_db ): zocalo_message = { - "register": "flush_spa_preprocess", + "register": "spa.flush_spa_preprocess", "session_id": session_id, "tag": tag.tag, } diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index f2d68b36c..451c25c27 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -281,7 +281,7 @@ def _flush_position_analysis( return foil_hole -def flush_spa_preprocessing(message: dict, db: Session, demo: bool = False): +def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): session_id = message["session_id"] stashed_files = murfey_db.exec( select(db.PreprocessStash) From 3ea7b6679414874617e31fe1ee8b8d37af7d046a Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 22 Jan 2025 16:54:15 +0000 Subject: [PATCH 2/9] Only look in gridsquare dm files --- src/murfey/client/contexts/spa_metadata.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/murfey/client/contexts/spa_metadata.py b/src/murfey/client/contexts/spa_metadata.py index d049c2a7a..5e99a7b7a 100644 --- a/src/murfey/client/contexts/spa_metadata.py +++ b/src/murfey/client/contexts/spa_metadata.py @@ -181,7 +181,11 @@ def post_transfer( }, ) - elif transferred_file.suffix == ".dm" and environment: + elif ( + transferred_file.suffix == ".dm" + and transferred_file.name.startswith("GridSquare") + and environment + ): gs_name = transferred_file.stem.split("_")[1] fh_positions = _foil_hole_positions(transferred_file, int(gs_name)) source = _get_source(transferred_file, environment=environment) From 8fac8f01bea99f2a211e73c76e8df2a9cf1c98e0 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 22 Jan 2025 17:12:28 +0000 Subject: [PATCH 3/9] Don't import murfey_db --- .../workflows/spa/flush_spa_preprocess.py | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index 451c25c27..444faaba8 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -9,7 +9,6 @@ from murfey.server import _murfey_id, _transport_object, sanitise from murfey.server.api.auth import MurfeySessionID -from murfey.server.murfey_db import murfey_db from murfey.util.config import get_machine_config, get_microscope from murfey.util.db import DataCollectionGroup, FoilHole, GridSquare from murfey.util.models import FoilHoleParameters, GridSquareParameters @@ -30,7 +29,7 @@ def register_grid_square( session_id: MurfeySessionID, gsid: int, grid_square_params: GridSquareParameters, - db=murfey_db, + db: Session, ): try: grid_square = db.exec( @@ -99,7 +98,7 @@ def register_foil_hole( session_id: MurfeySessionID, gs_name: int, foil_hole_params: FoilHoleParameters, - db=murfey_db, + db: Session, ): try: gs = db.exec( @@ -201,7 +200,7 @@ def _flush_position_analysis( movie_path: Path, dcg_id: int, session_id: int, db: Session ) -> Optional[int]: """Register a grid square and foil hole in the database""" - data_collection_group = murfey_db.exec( + data_collection_group = db.exec( select(db.DataCollectionGroup).where(db.DataCollectionGroup.id == dcg_id) ).one() @@ -246,7 +245,7 @@ def _flush_position_analysis( image=gs.image, ) # Insert or update this grid square in the database - register_grid_square(session_id, gs.id, grid_square_parameters, murfey_db) + register_grid_square(session_id, gs.id, grid_square_parameters, db) # Find the foil hole info and register it foil_hole = foil_hole_from_file(movie_path) @@ -277,13 +276,13 @@ def _flush_position_analysis( name=foil_hole, ) # Insert or update this foil hole in the database - register_foil_hole(session_id, gs.id, foil_hole_parameters, murfey_db) + register_foil_hole(session_id, gs.id, foil_hole_parameters, db) return foil_hole def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): session_id = message["session_id"] - stashed_files = murfey_db.exec( + stashed_files = db.exec( select(db.PreprocessStash) .where(db.PreprocessStash.session_id == session_id) .where(db.PreprocessStash.tag == message["tag"]) @@ -291,7 +290,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): if not stashed_files: return None instrument_name = ( - murfey_db.exec(select(db.Session).where(db.Session.id == message["session_id"])) + db.exec(select(db.Session).where(db.Session.id == message["session_id"])) .one() .instrument_name ) @@ -299,7 +298,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): instrument_name ] recipe_name = machine_config.recipes.get("em-spa-preprocess", "em-spa-preprocess") - collected_ids = murfey_db.exec( + collected_ids = db.exec( select( db.DataCollectionGroup, db.DataCollection, @@ -313,7 +312,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): .where(db.AutoProcProgram.pj_id == db.ProcessingJob.id) .where(db.ProcessingJob.recipe == recipe_name) ).one() - params = murfey_db.exec( + params = db.exec( select(db.SPARelionParameters, db.SPAFeedbackParameters) .where(db.SPARelionParameters.pj_id == collected_ids[2].id) .where(db.SPAFeedbackParameters.pj_id == db.SPARelionParameters.pj_id) @@ -330,13 +329,13 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): murfey_ids = _murfey_id( collected_ids[3].id, - murfey_db, + db, number=2 * len(stashed_files), close=False, ) if feedback_params.picker_murfey_id is None: feedback_params.picker_murfey_id = murfey_ids[1] - murfey_db.add(feedback_params) + db.add(feedback_params) for i, f in enumerate(stashed_files): if f.foil_hole_id: @@ -368,7 +367,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): tag=f.tag, foil_hole_id=foil_hole_id, ) - murfey_db.add(movie) + db.add(movie) zocalo_message: dict = { "recipes": [recipe_name], "parameters": { @@ -400,11 +399,11 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): _transport_object.send( "processing_recipe", zocalo_message, new_connection=True ) - murfey_db.delete(f) + db.delete(f) else: logger.error( f"Pre-processing was requested for {ppath.name} but no Zocalo transport object was found" ) - murfey_db.commit() - murfey_db.close() + db.commit() + db.close() return None From dbd6ed7609ef421742ee0044365b24d0b91d6559 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 22 Jan 2025 17:23:49 +0000 Subject: [PATCH 4/9] Need to import db models individually --- .../workflows/spa/flush_spa_preprocess.py | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index 444faaba8..996d48175 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -10,7 +10,18 @@ from murfey.server import _murfey_id, _transport_object, sanitise from murfey.server.api.auth import MurfeySessionID from murfey.util.config import get_machine_config, get_microscope -from murfey.util.db import DataCollectionGroup, FoilHole, GridSquare +from murfey.util.db import ( + AutoProcProgram, + DataCollection, + DataCollectionGroup, + FoilHole, + GridSquare, + Movie, + PreprocessStash, + ProcessingJob, +) +from murfey.util.db import Session as MurfeySession +from murfey.util.db import SPAFeedbackParameters, SPARelionParameters from murfey.util.models import FoilHoleParameters, GridSquareParameters from murfey.util.processing_params import default_spa_parameters from murfey.util.spa_metadata import ( @@ -201,7 +212,7 @@ def _flush_position_analysis( ) -> Optional[int]: """Register a grid square and foil hole in the database""" data_collection_group = db.exec( - select(db.DataCollectionGroup).where(db.DataCollectionGroup.id == dcg_id) + select(DataCollectionGroup).where(DataCollectionGroup.id == dcg_id) ).one() # Work out the grid square and associated metadata file @@ -283,14 +294,14 @@ def _flush_position_analysis( def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): session_id = message["session_id"] stashed_files = db.exec( - select(db.PreprocessStash) - .where(db.PreprocessStash.session_id == session_id) - .where(db.PreprocessStash.tag == message["tag"]) + select(PreprocessStash) + .where(PreprocessStash.session_id == session_id) + .where(PreprocessStash.tag == message["tag"]) ).all() if not stashed_files: return None instrument_name = ( - db.exec(select(db.Session).where(db.Session.id == message["session_id"])) + db.exec(select(MurfeySession).where(MurfeySession.id == message["session_id"])) .one() .instrument_name ) @@ -300,22 +311,22 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): recipe_name = machine_config.recipes.get("em-spa-preprocess", "em-spa-preprocess") collected_ids = db.exec( select( - db.DataCollectionGroup, - db.DataCollection, - db.ProcessingJob, - db.AutoProcProgram, + DataCollectionGroup, + DataCollection, + ProcessingJob, + AutoProcProgram, ) - .where(db.DataCollectionGroup.session_id == session_id) - .where(db.DataCollectionGroup.tag == message["tag"]) - .where(db.DataCollection.dcg_id == db.DataCollectionGroup.id) - .where(db.ProcessingJob.dc_id == db.DataCollection.id) - .where(db.AutoProcProgram.pj_id == db.ProcessingJob.id) - .where(db.ProcessingJob.recipe == recipe_name) + .where(DataCollectionGroup.session_id == session_id) + .where(DataCollectionGroup.tag == message["tag"]) + .where(DataCollection.dcg_id == DataCollectionGroup.id) + .where(ProcessingJob.dc_id == DataCollection.id) + .where(AutoProcProgram.pj_id == ProcessingJob.id) + .where(ProcessingJob.recipe == recipe_name) ).one() params = db.exec( - select(db.SPARelionParameters, db.SPAFeedbackParameters) - .where(db.SPARelionParameters.pj_id == collected_ids[2].id) - .where(db.SPAFeedbackParameters.pj_id == db.SPARelionParameters.pj_id) + select(SPARelionParameters, SPAFeedbackParameters) + .where(SPARelionParameters.pj_id == collected_ids[2].id) + .where(SPAFeedbackParameters.pj_id == SPARelionParameters.pj_id) ).one() proc_params = params[0] feedback_params = params[1] @@ -360,7 +371,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): ppath = Path(f.file_path) if not mrcp.parent.exists(): mrcp.parent.mkdir(parents=True) - movie = db.Movie( + movie = Movie( murfey_id=murfey_ids[2 * i], path=f.file_path, image_number=f.image_number, From 7ba1d9de4e4a361f72f83795990f25b30ee845bf Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 23 Jan 2025 08:59:36 +0000 Subject: [PATCH 5/9] Workflow should return a boolean --- src/murfey/server/__init__.py | 3 +++ src/murfey/workflows/spa/flush_spa_preprocess.py | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/murfey/server/__init__.py b/src/murfey/server/__init__.py index 39786ff2f..431385508 100644 --- a/src/murfey/server/__init__.py +++ b/src/murfey/server/__init__.py @@ -2948,7 +2948,10 @@ def feedback_callback(header: dict, message: dict) -> None: else: # Send it directly to DLQ without trying to rerun it _transport_object.transport.nack(header, requeue=False) + if not result: + logger.error(f"Workflow {message['register']} returned {result}") return None + logger.error(f"No workflow found for {message['register']}") if _transport_object: _transport_object.transport.nack(header, requeue=False) return None diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index 996d48175..03fc93802 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -291,7 +291,7 @@ def _flush_position_analysis( return foil_hole -def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): +def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool: session_id = message["session_id"] stashed_files = db.exec( select(PreprocessStash) @@ -299,7 +299,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): .where(PreprocessStash.tag == message["tag"]) ).all() if not stashed_files: - return None + return True instrument_name = ( db.exec(select(MurfeySession).where(MurfeySession.id == message["session_id"])) .one() @@ -334,9 +334,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): logger.warning( f"No SPA processing parameters found for client processing job ID {collected_ids[2].id}" ) - raise ValueError( - "No processing parameters were found in the database when flushing SPA preprocessing" - ) + return False murfey_ids = _murfey_id( collected_ids[3].id, @@ -417,4 +415,4 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False): ) db.commit() db.close() - return None + return True From 953f2fb6ca93ac7a2ca676e7aac18dff76fd4a44 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 23 Jan 2025 09:07:07 +0000 Subject: [PATCH 6/9] switch db to murfey_db --- .../workflows/spa/flush_spa_preprocess.py | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index 03fc93802..e7f70e8bf 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -40,10 +40,10 @@ def register_grid_square( session_id: MurfeySessionID, gsid: int, grid_square_params: GridSquareParameters, - db: Session, + murfey_db: Session, ): try: - grid_square = db.exec( + grid_square = murfey_db.exec( select(GridSquare) .where(GridSquare.name == gsid) .where(GridSquare.tag == grid_square_params.tag) @@ -61,7 +61,7 @@ def register_grid_square( _transport_object.do_update_grid_square(grid_square.id, grid_square_params) except Exception: if _transport_object: - dcg = db.exec( + dcg = murfey_db.exec( select(DataCollectionGroup) .where(DataCollectionGroup.session_id == session_id) .where(DataCollectionGroup.tag == grid_square_params.tag) @@ -100,19 +100,19 @@ def register_grid_square( pixel_size=grid_square_params.pixel_size, image=secured_grid_square_image_path, ) - db.add(grid_square) - db.commit() - db.close() + murfey_db.add(grid_square) + murfey_db.commit() + murfey_db.close() def register_foil_hole( session_id: MurfeySessionID, gs_name: int, foil_hole_params: FoilHoleParameters, - db: Session, + murfey_db: Session, ): try: - gs = db.exec( + gs = murfey_db.exec( select(GridSquare) .where(GridSquare.tag == foil_hole_params.tag) .where(GridSquare.session_id == session_id) @@ -130,7 +130,7 @@ def register_foil_hole( else: jpeg_size = (0, 0) try: - foil_hole = db.exec( + foil_hole = murfey_db.exec( select(FoilHole) .where(FoilHole.name == foil_hole_params.name) .where(FoilHole.grid_square_id == gsid) @@ -190,9 +190,9 @@ def register_foil_hole( pixel_size=foil_hole_params.pixel_size, image=secured_foil_hole_image_path, ) - db.add(foil_hole) - db.commit() - db.close() + murfey_db.add(foil_hole) + murfey_db.commit() + murfey_db.close() def _grid_square_metadata_file(f: Path, grid_square: int) -> Optional[Path]: @@ -208,10 +208,10 @@ def _grid_square_metadata_file(f: Path, grid_square: int) -> Optional[Path]: def _flush_position_analysis( - movie_path: Path, dcg_id: int, session_id: int, db: Session + movie_path: Path, dcg_id: int, session_id: int, murfey_db: Session ) -> Optional[int]: """Register a grid square and foil hole in the database""" - data_collection_group = db.exec( + data_collection_group = murfey_db.exec( select(DataCollectionGroup).where(DataCollectionGroup.id == dcg_id) ).one() @@ -256,7 +256,7 @@ def _flush_position_analysis( image=gs.image, ) # Insert or update this grid square in the database - register_grid_square(session_id, gs.id, grid_square_parameters, db) + register_grid_square(session_id, gs.id, grid_square_parameters, murfey_db) # Find the foil hole info and register it foil_hole = foil_hole_from_file(movie_path) @@ -287,13 +287,13 @@ def _flush_position_analysis( name=foil_hole, ) # Insert or update this foil hole in the database - register_foil_hole(session_id, gs.id, foil_hole_parameters, db) + register_foil_hole(session_id, gs.id, foil_hole_parameters, murfey_db) return foil_hole -def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool: +def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) -> bool: session_id = message["session_id"] - stashed_files = db.exec( + stashed_files = murfey_db.exec( select(PreprocessStash) .where(PreprocessStash.session_id == session_id) .where(PreprocessStash.tag == message["tag"]) @@ -301,7 +301,9 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool if not stashed_files: return True instrument_name = ( - db.exec(select(MurfeySession).where(MurfeySession.id == message["session_id"])) + murfey_db.exec( + select(MurfeySession).where(MurfeySession.id == message["session_id"]) + ) .one() .instrument_name ) @@ -309,7 +311,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool instrument_name ] recipe_name = machine_config.recipes.get("em-spa-preprocess", "em-spa-preprocess") - collected_ids = db.exec( + collected_ids = murfey_db.exec( select( DataCollectionGroup, DataCollection, @@ -323,7 +325,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool .where(AutoProcProgram.pj_id == ProcessingJob.id) .where(ProcessingJob.recipe == recipe_name) ).one() - params = db.exec( + params = murfey_db.exec( select(SPARelionParameters, SPAFeedbackParameters) .where(SPARelionParameters.pj_id == collected_ids[2].id) .where(SPAFeedbackParameters.pj_id == SPARelionParameters.pj_id) @@ -338,13 +340,13 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool murfey_ids = _murfey_id( collected_ids[3].id, - db, + murfey_db, number=2 * len(stashed_files), close=False, ) if feedback_params.picker_murfey_id is None: feedback_params.picker_murfey_id = murfey_ids[1] - db.add(feedback_params) + murfey_db.add(feedback_params) for i, f in enumerate(stashed_files): if f.foil_hole_id: @@ -356,7 +358,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool movie_path=f.file_path, dcg_id=collected_ids[0].id, session_id=session_id, - db=db, + murfey_db=murfey_db, ) except Exception as e: logger.error( @@ -376,7 +378,7 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool tag=f.tag, foil_hole_id=foil_hole_id, ) - db.add(movie) + murfey_db.add(movie) zocalo_message: dict = { "recipes": [recipe_name], "parameters": { @@ -408,11 +410,11 @@ def flush_spa_preprocess(message: dict, db: Session, demo: bool = False) -> bool _transport_object.send( "processing_recipe", zocalo_message, new_connection=True ) - db.delete(f) + murfey_db.delete(f) else: logger.error( f"Pre-processing was requested for {ppath.name} but no Zocalo transport object was found" ) - db.commit() - db.close() + murfey_db.commit() + murfey_db.close() return True From 632285cc5e49cf10024e9c27387cf7662e8d8ea4 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 23 Jan 2025 11:05:26 +0000 Subject: [PATCH 7/9] Sanitise the logs --- src/murfey/server/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/murfey/server/__init__.py b/src/murfey/server/__init__.py index 431385508..11c4b3b35 100644 --- a/src/murfey/server/__init__.py +++ b/src/murfey/server/__init__.py @@ -2949,9 +2949,11 @@ def feedback_callback(header: dict, message: dict) -> None: # Send it directly to DLQ without trying to rerun it _transport_object.transport.nack(header, requeue=False) if not result: - logger.error(f"Workflow {message['register']} returned {result}") + logger.error( + f"Workflow {sanitise(message['register'])} returned {result}" + ) return None - logger.error(f"No workflow found for {message['register']}") + logger.error(f"No workflow found for {sanitise(message['register'])}") if _transport_object: _transport_object.transport.nack(header, requeue=False) return None From 7703abafbae2221a7ae000a00294dd3beb53be0b Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 23 Jan 2025 14:41:56 +0000 Subject: [PATCH 8/9] If no foil holes in the grid square, don't register them --- src/murfey/util/spa_metadata.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/murfey/util/spa_metadata.py b/src/murfey/util/spa_metadata.py index 6dea16ac1..bb4fd3d72 100644 --- a/src/murfey/util/spa_metadata.py +++ b/src/murfey/util/spa_metadata.py @@ -157,6 +157,8 @@ def foil_hole_data(xml_path: Path, foil_hole: int, grid_square: int) -> FoilHole serialization_array = data["TargetLocations"]["TargetLocationsEfficient"][ "a:m_serializationArray" ] + if len(serialization_array.keys()) == 0: + return FoilHoleInfo(id=foil_hole, grid_square_id=grid_square) for key in serialization_array.keys(): if key.startswith("b:KeyValuePairOfintTargetLocation"): required_key = key From 3516ce57077145eaf26baace617cea8c7c9f1276 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 23 Jan 2025 14:44:21 +0000 Subject: [PATCH 9/9] Convert stashed file name to path --- src/murfey/workflows/spa/flush_spa_preprocess.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index e7f70e8bf..d0c220b5a 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -355,7 +355,7 @@ def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) # Register grid square and foil hole if not present try: foil_hole_id = _flush_position_analysis( - movie_path=f.file_path, + movie_path=Path(f.file_path), dcg_id=collected_ids[0].id, session_id=session_id, murfey_db=murfey_db,