|
9 | 9 | from pydantic import BaseModel |
10 | 10 | from sqlalchemy import func |
11 | 11 | from sqlmodel import select |
12 | | -from werkzeug.utils import secure_filename |
13 | 12 |
|
14 | 13 | import murfey.server.prometheus as prom |
15 | 14 | from murfey.server import _transport_object |
|
18 | 17 | validate_instrument_token, |
19 | 18 | ) |
20 | 19 | from murfey.server.api.shared import ( |
| 20 | + find_upstream_visits as _find_upstream_visits, |
| 21 | + gather_upstream_tiffs as _gather_upstream_tiffs, |
21 | 22 | get_foil_hole as _get_foil_hole, |
22 | 23 | get_foil_holes_from_grid_square as _get_foil_holes_from_grid_square, |
23 | 24 | get_grid_squares as _get_grid_squares, |
24 | 25 | get_grid_squares_from_dcg as _get_grid_squares_from_dcg, |
25 | 26 | get_machine_config_for_instrument, |
26 | | - get_upstream_tiff_dirs, |
| 27 | + get_tiff_file as _get_tiff_file, |
27 | 28 | remove_session_by_id, |
28 | 29 | ) |
29 | 30 | from murfey.server.ispyb import DB as ispyb_db, get_all_ongoing_visits |
30 | 31 | from murfey.server.murfey_db import murfey_db |
31 | 32 | from murfey.util import sanitise |
32 | | -from murfey.util.config import MachineConfig, get_machine_config |
| 33 | +from murfey.util.config import MachineConfig |
33 | 34 | from murfey.util.db import ( |
34 | 35 | AutoProcProgram, |
35 | 36 | ClientEnvironment, |
@@ -418,62 +419,21 @@ def register_batch_position( |
418 | 419 |
|
419 | 420 | @correlative_router.get("/sessions/{session_id}/upstream_visits") |
420 | 421 | async def find_upstream_visits(session_id: MurfeySessionID, db=murfey_db): |
421 | | - murfey_session = db.exec(select(Session).where(Session.id == session_id)).one() |
422 | | - visit_name = murfey_session.visit |
423 | | - instrument_name = murfey_session.instrument_name |
424 | | - machine_config = get_machine_config(instrument_name=instrument_name)[ |
425 | | - instrument_name |
426 | | - ] |
427 | | - upstream_visits = {} |
428 | | - # Iterates through provided upstream directories |
429 | | - for p in machine_config.upstream_data_directories: |
430 | | - # Looks for visit name in file path |
431 | | - for v in Path(p).glob(f"{visit_name.split('-')[0]}-*"): |
432 | | - upstream_visits[v.name] = v / machine_config.processed_directory_name |
433 | | - return upstream_visits |
| 422 | + return _find_upstream_visits(session_id=session_id, db=db) |
434 | 423 |
|
435 | 424 |
|
436 | 425 | @correlative_router.get( |
437 | 426 | "/visits/{visit_name}/sessions/{session_id}/upstream_tiff_paths" |
438 | 427 | ) |
439 | 428 | async def gather_upstream_tiffs(visit_name: str, session_id: int, db=murfey_db): |
440 | | - """ |
441 | | - Looks for TIFF files associated with the current session in the permitted storage |
442 | | - servers, and returns their relative file paths as a list. |
443 | | - """ |
444 | | - instrument_name = ( |
445 | | - db.exec(select(Session).where(Session.id == session_id)).one().instrument_name |
446 | | - ) |
447 | | - upstream_tiff_paths = [] |
448 | | - tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name) |
449 | | - if not tiff_dirs: |
450 | | - return None |
451 | | - for tiff_dir in tiff_dirs: |
452 | | - for f in tiff_dir.glob("**/*.tiff"): |
453 | | - upstream_tiff_paths.append(str(f.relative_to(tiff_dir))) |
454 | | - for f in tiff_dir.glob("**/*.tif"): |
455 | | - upstream_tiff_paths.append(str(f.relative_to(tiff_dir))) |
456 | | - return upstream_tiff_paths |
| 429 | + return _gather_upstream_tiffs(visit_name=visit_name, session_id=session_id, db=db) |
457 | 430 |
|
458 | 431 |
|
459 | 432 | @correlative_router.get( |
460 | 433 | "/visits/{visit_name}/sessions/{session_id}/upstream_tiff/{tiff_path:path}" |
461 | 434 | ) |
462 | | -async def get_tiff(visit_name: str, session_id: int, tiff_path: str, db=murfey_db): |
463 | | - instrument_name = ( |
464 | | - db.exec(select(Session).where(Session.id == session_id)).one().instrument_name |
| 435 | +async def get_tiff_file(visit_name: str, session_id: int, tiff_path: str, db=murfey_db): |
| 436 | + tiff_file = _get_tiff_file( |
| 437 | + visit_name=visit_name, session_id=session_id, tiff_path=tiff_path, db=db |
465 | 438 | ) |
466 | | - tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name) |
467 | | - if not tiff_dirs: |
468 | | - return None |
469 | | - |
470 | | - tiff_path = "/".join(secure_filename(p) for p in tiff_path.split("/")) |
471 | | - for tiff_dir in tiff_dirs: |
472 | | - test_path = tiff_dir / tiff_path |
473 | | - if test_path.is_file(): |
474 | | - break |
475 | | - else: |
476 | | - logger.warning(f"TIFF {tiff_path} not found") |
477 | | - return None |
478 | | - |
479 | | - return FileResponse(path=test_path) |
| 439 | + return FileResponse(path=tiff_file) if isinstance(tiff_file, Path) else tiff_file |
0 commit comments