Skip to content

Commit 5c94171

Browse files
authored
Various fixes to CLEM workflow and bootstrap API endpoints (#494)
* Loaded 'feedback_queue' from either the security config file or the 'TransportManager' object. * Added unit tests for some of the functions fixed as part of this PR. * Removed unnecessary database refreshes from CLEM workflow. * Optimised validation functions used in CLEM workflow * More verbose logging for CLEM workflow. * Corrected canonical representation of variables in log messages for "bootstrap" API endpoints.
1 parent 400765c commit 5c94171

File tree

12 files changed

+518
-122
lines changed

12 files changed

+518
-122
lines changed

src/murfey/server/api/bootstrap.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ def get_msys2_package_file(
539539

540540
# Validate environment
541541
if any(system in env[0] and environment in env[1] for env in valid_envs) is False:
542-
raise ValueError(f"{system!r}/{environment!r} is not a valid msys2 environment")
542+
raise ValueError(f"'{system}/{environment}' is not a valid msys2 environment")
543543

544544
# Validate package name
545545
# MSYS2 package names contain:
@@ -593,7 +593,7 @@ def _get_full_pypi_path_response(package: str) -> requests.Response:
593593
else:
594594
raise HTTPException(status_code=response.status_code)
595595
else:
596-
raise ValueError(f"{package} is not a valid package name")
596+
raise ValueError(f"{package!r} is not a valid package name")
597597

598598

599599
@pypi.get("/", response_class=Response)

src/murfey/server/api/clem.py

Lines changed: 141 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
from murfey.server import _transport_object
1818
from murfey.server.murfey_db import murfey_db
19+
from murfey.util import sanitise
1920
from murfey.util.config import get_machine_config
2021
from murfey.util.db import (
2122
CLEMImageMetadata,
@@ -77,7 +78,7 @@ def validate_and_sanitise(
7778
machine_config = get_machine_config(instrument_name=instrument_name)[
7879
instrument_name
7980
]
80-
base_path = machine_config.rsync_basepath.as_posix()
81+
rsync_basepath = machine_config.rsync_basepath.resolve()
8182

8283
# Check that full file path doesn't contain unallowed characters
8384
# Currently allows only:
@@ -90,13 +91,9 @@ def validate_and_sanitise(
9091
raise ValueError(f"Unallowed characters present in {file}")
9192

9293
# Check that it's not accessing somehwere it's not allowed
93-
if not str(full_path).startswith(str(base_path)):
94+
if not str(full_path).startswith(str(rsync_basepath)):
9495
raise ValueError(f"{file} points to a directory that is not permitted")
9596

96-
# Check that it's a file, not a directory
97-
if full_path.is_file() is False:
98-
raise ValueError(f"{file} is not a file")
99-
10097
# Check that it is of a permitted file type
10198
if f"{full_path.suffix}" not in valid_file_types:
10299
raise ValueError(f"{full_path.suffix} is not a permitted file format")
@@ -184,7 +181,7 @@ def get_db_entry(
184181
)
185182
db.add(db_entry)
186183
db.commit()
187-
db.refresh(db_entry)
184+
188185
except Exception:
189186
raise Exception
190187

@@ -215,7 +212,11 @@ def register_lif_file(
215212
file_path=lif_file,
216213
)
217214
except Exception:
218-
logger.error(traceback.format_exc())
215+
logger.error(
216+
"Exception encountered while registering "
217+
f"LIF file {sanitise(str(lif_file))!r}: \n"
218+
f"{traceback.format_exc()}"
219+
)
219220
return False
220221

221222
# Add metadata information if provided
@@ -224,7 +225,11 @@ def register_lif_file(
224225
master_metadata = validate_and_sanitise(master_metadata, session_id, db)
225226
clem_lif_file.master_metadata = str(master_metadata)
226227
except Exception:
227-
logger.warning(traceback.format_exc())
228+
logger.warning(
229+
"Unable to add master metadata information to database entry for "
230+
f"LIF file {sanitise(str(lif_file))!r}: \n"
231+
f"{traceback.format_exc()}"
232+
)
228233

229234
# Register child metadata if provided
230235
for metadata in child_metadata:
@@ -238,7 +243,12 @@ def register_lif_file(
238243
# Append to database entry
239244
clem_lif_file.child_metadata.append(metadata_db_entry)
240245
except Exception:
241-
logger.warning(traceback.format_exc())
246+
logger.warning(
247+
"Unable to register "
248+
f"metadata file {sanitise(str(metadata))!r} in association with "
249+
f"LIF file {sanitise(str(lif_file))!r}: \n"
250+
f"{traceback.format_exc()}"
251+
)
242252
continue
243253

244254
# Register child image series if provided
@@ -253,7 +263,12 @@ def register_lif_file(
253263
# Append to database entry
254264
clem_lif_file.child_series.append(series_db_entry)
255265
except Exception:
256-
logger.warning(traceback.format_exc())
266+
logger.warning(
267+
"Unable to register "
268+
f"metadata file {sanitise(series)!r} in association with "
269+
f"LIF file {sanitise(str(lif_file))!r}: \n"
270+
f"{traceback.format_exc()}"
271+
)
257272
continue
258273

259274
# Register child image stacks if provided
@@ -268,7 +283,12 @@ def register_lif_file(
268283
# Append to database entry
269284
clem_lif_file.child_stacks.append(stack_db_entry)
270285
except Exception:
271-
logger.warning(traceback.format_exc())
286+
logger.warning(
287+
"Unable to register "
288+
f"image stack {sanitise(str(stack))!r} in association with "
289+
f"LIF file {sanitise(str(lif_file))!r}: \n"
290+
f"{traceback.format_exc()}"
291+
)
272292
continue
273293

274294
# Commit to database
@@ -296,7 +316,11 @@ def register_tiff_file(
296316
file_path=tiff_file,
297317
)
298318
except Exception:
299-
logger.error(traceback.format_exc())
319+
logger.error(
320+
"Exception encountered while registering "
321+
f"TIFF file {sanitise(str(tiff_file))!r}: \n"
322+
f"{traceback.format_exc()}"
323+
)
300324
return False
301325

302326
# Add metadata if provided
@@ -311,7 +335,12 @@ def register_tiff_file(
311335
# Link database entries
312336
clem_tiff_file.associated_metadata = metadata_db_entry
313337
except Exception:
314-
logger.warning(traceback.format_exc())
338+
logger.warning(
339+
"Unable to register "
340+
f"metadata file {sanitise(str(associated_metadata))!r} in association with "
341+
f"TIFF file {sanitise(str(tiff_file))!r}: \n"
342+
f"{traceback.format_exc()}"
343+
)
315344

316345
# Add series information if provided
317346
if associated_series is not None:
@@ -325,7 +354,12 @@ def register_tiff_file(
325354
# Link database entries
326355
clem_tiff_file.child_series = series_db_entry
327356
except Exception:
328-
logger.warning(traceback.format_exc())
357+
logger.warning(
358+
"Unable to register "
359+
f"CLEM series {sanitise(associated_series)!r} in association with "
360+
f"TIFF file {sanitise(str(tiff_file))!r}: \n"
361+
f"{traceback.format_exc()}"
362+
)
329363

330364
# Add image stack information if provided
331365
if associated_stack is not None:
@@ -339,7 +373,11 @@ def register_tiff_file(
339373
# Link database entries
340374
clem_tiff_file.child_stack = stack_db_entry
341375
except Exception:
342-
logger.warning(traceback.format_exc())
376+
logger.warning(
377+
"Unable to register "
378+
f"image stack {sanitise(str(associated_stack))!r} in association with "
379+
f"{traceback.format_exc()}"
380+
)
343381

344382
# Commit to database
345383
db.add(clem_tiff_file)
@@ -368,7 +406,11 @@ def register_clem_metadata(
368406
file_path=metadata_file,
369407
)
370408
except Exception:
371-
logger.error(traceback.format_exc())
409+
logger.error(
410+
"Exception encountered while registering"
411+
f"metadata file {sanitise(str(metadata_file))!r}"
412+
f"{traceback.format_exc()}"
413+
)
372414
return False
373415

374416
# Register a parent LIF file if provided
@@ -383,7 +425,12 @@ def register_clem_metadata(
383425
# Link database entries
384426
clem_metadata.parent_lif = lif_db_entry
385427
except Exception:
386-
logger.warning(traceback.format_exc())
428+
logger.warning(
429+
"Unable to register "
430+
f"LIF file {sanitise(str(parent_lif))!r} in association with "
431+
f"metadata file {sanitise(str(metadata_file))!r}: \n"
432+
f"{traceback.format_exc()}"
433+
)
387434

388435
# Register associated TIFF files if provided
389436
for tiff in associated_tiffs:
@@ -397,7 +444,12 @@ def register_clem_metadata(
397444
# Append entry
398445
clem_metadata.associated_tiffs.append(tiff_db_entry)
399446
except Exception:
400-
logger.warning(traceback.format_exc())
447+
logger.warning(
448+
"Unable to register "
449+
f"TIFF file {sanitise(str(tiff))!r} in association with "
450+
f"metadata file {sanitise(str(metadata_file))!r}: \n"
451+
f"{traceback.format_exc()}"
452+
)
401453
continue
402454

403455
# Register associated image series if provided
@@ -414,7 +466,12 @@ def register_clem_metadata(
414466
db.add(series_db_entry)
415467
db.commit()
416468
except Exception:
417-
logger.warning(traceback.format_exc())
469+
logger.warning(
470+
"Unable to register "
471+
f"CLEM series {sanitise(associated_series)!r} in association with "
472+
f"metadata file {sanitise(str(metadata_file))!r}: \n"
473+
f"{traceback.format_exc()}"
474+
)
418475

419476
# Register associated image stacks if provided
420477
for stack in associated_stacks:
@@ -427,7 +484,12 @@ def register_clem_metadata(
427484
)
428485
clem_metadata.associated_stacks.append(stack_db_entry)
429486
except Exception:
430-
logger.warning(traceback.format_exc())
487+
logger.warning(
488+
"Unable to register "
489+
f"image stack {sanitise(str(stack))!r} in association with "
490+
f"metadata file {sanitise(str(metadata_file))!r}: \n"
491+
f"{traceback.format_exc()}"
492+
)
431493
continue
432494

433495
# Commit to database
@@ -456,7 +518,11 @@ def register_image_series(
456518
series_name=series_name,
457519
)
458520
except Exception:
459-
logger.error(traceback.format_exc())
521+
logger.error(
522+
"Exception encountered while registering "
523+
f"CLEM series {sanitise(series_name)!r}: \n"
524+
f"{traceback.format_exc()}"
525+
)
460526
return False
461527

462528
# Register parent LIF file if provided
@@ -471,7 +537,12 @@ def register_image_series(
471537
# Link entries
472538
clem_image_series.parent_lif = lif_db_entry
473539
except Exception:
474-
logger.warning(traceback.format_exc())
540+
logger.warning(
541+
"Unable to register "
542+
f"LIF file {sanitise(str(parent_lif))!r} in association with "
543+
f"CLEM series {sanitise(series_name)!r}: \n"
544+
f"{traceback.format_exc()}"
545+
)
475546

476547
# Register parent TIFFs if provided
477548
for tiff in parent_tiffs:
@@ -485,7 +556,12 @@ def register_image_series(
485556
# Append entry
486557
clem_image_series.parent_tiffs.append(tiff_db_entry)
487558
except Exception:
488-
logger.warning(traceback.format_exc())
559+
logger.warning(
560+
"Unable to register "
561+
f"TIFF file {sanitise(str(tiff))!r} in association with "
562+
f"CLEM series {sanitise(series_name)!r}: \n"
563+
f"{traceback.format_exc()}"
564+
)
489565
continue # Try next item in loop
490566

491567
# Register associated metadata if provided
@@ -500,7 +576,12 @@ def register_image_series(
500576
# Link entries
501577
clem_image_series.associated_metadata = metadata_db_entry
502578
except Exception:
503-
logger.warning(traceback.format_exc())
579+
logger.warning(
580+
"Unable to register "
581+
f"metadata file {sanitise(str(associated_metadata))!r} in association with "
582+
f"CLEM series {sanitise(series_name)!r}: \n"
583+
f"{traceback.format_exc()}"
584+
)
504585

505586
# Register child image stacks if provided
506587
for stack in child_stacks:
@@ -514,7 +595,12 @@ def register_image_series(
514595
# Append entry
515596
clem_image_series.child_stacks.append(stack_db_entry)
516597
except Exception:
517-
logger.warning(traceback.format_exc())
598+
logger.warning(
599+
"Unable to register "
600+
f"image stack {sanitise(str(stack))!r} in association with "
601+
f"CLEM series {sanitise(series_name)!r}: \n"
602+
f"{traceback.format_exc()}"
603+
)
518604
continue
519605

520606
# Register
@@ -544,7 +630,11 @@ def register_image_stack(
544630
file_path=image_stack,
545631
)
546632
except Exception:
547-
logger.error(traceback.format_exc())
633+
logger.error(
634+
"Exception encountered while registering "
635+
f"image stack {sanitise(str(image_stack))!r}: \n"
636+
f"{traceback.format_exc()}"
637+
)
548638
return False
549639

550640
# Register channel name if provided
@@ -562,7 +652,12 @@ def register_image_stack(
562652
)
563653
clem_image_stack.parent_lif = lif_db_entry
564654
except Exception:
565-
logger.warning(traceback.format_exc())
655+
logger.warning(
656+
"Unable to register "
657+
f"LIF file {sanitise(str(parent_lif))!r} in association with "
658+
f"image stack {sanitise(str(image_stack))!r}: \n"
659+
f"{traceback.format_exc()}"
660+
)
566661

567662
# Register parent TIFF files if provided
568663
for tiff in parent_tiffs:
@@ -576,7 +671,12 @@ def register_image_stack(
576671
# Append entry
577672
clem_image_stack.parent_tiffs.append(tiff_db_entry)
578673
except Exception:
579-
logger.warning(traceback.format_exc())
674+
logger.warning(
675+
"Unable to register "
676+
f"TIFF file {sanitise(str(tiff))!r} in association with "
677+
f"image stack {sanitise(str(image_stack))!r}: \n"
678+
f"{traceback.format_exc()}"
679+
)
580680
continue
581681

582682
# Register associated metadata if provided
@@ -591,7 +691,12 @@ def register_image_stack(
591691
# Link entries
592692
clem_image_stack.associated_metadata = metadata_db_entry
593693
except Exception:
594-
logger.warning(traceback.format_exc())
694+
logger.warning(
695+
"Unable to register "
696+
f"metadata file {sanitise(str(associated_metadata))!r} in association with "
697+
f"image stack {sanitise(str(image_stack))!r}: \n"
698+
f"{traceback.format_exc()}"
699+
)
595700

596701
# Register parent series if provided
597702
if parent_series is not None:
@@ -605,7 +710,12 @@ def register_image_stack(
605710
# Link entries
606711
clem_image_stack.parent_series = series_db_entry
607712
except Exception:
608-
logger.warning(traceback.format_exc())
713+
logger.warning(
714+
"Unable to register "
715+
f"CLEM series {sanitise(parent_series)!r} in association with "
716+
f"image stack {sanitise(str(image_stack))!r}: \n"
717+
f"{traceback.format_exc()}"
718+
)
609719

610720
# Register updates to entry
611721
db.add(clem_image_stack)

0 commit comments

Comments
 (0)