Skip to content

Commit 11162dc

Browse files
committed
Moved common correlative workflow functions into 'murfey.server.api.shared' and updated function name
1 parent e4b297a commit 11162dc

File tree

4 files changed

+90
-105
lines changed

4 files changed

+90
-105
lines changed

src/murfey/server/api/session_control.py

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from pydantic import BaseModel
1010
from sqlalchemy import func
1111
from sqlmodel import select
12-
from werkzeug.utils import secure_filename
1312

1413
import murfey.server.prometheus as prom
1514
from murfey.server import _transport_object
@@ -18,18 +17,20 @@
1817
validate_instrument_token,
1918
)
2019
from murfey.server.api.shared import (
20+
find_upstream_visits as _find_upstream_visits,
21+
gather_upstream_tiffs as _gather_upstream_tiffs,
2122
get_foil_hole as _get_foil_hole,
2223
get_foil_holes_from_grid_square as _get_foil_holes_from_grid_square,
2324
get_grid_squares as _get_grid_squares,
2425
get_grid_squares_from_dcg as _get_grid_squares_from_dcg,
2526
get_machine_config_for_instrument,
26-
get_upstream_tiff_dirs,
27+
get_tiff_file as _get_tiff_file,
2728
remove_session_by_id,
2829
)
2930
from murfey.server.ispyb import DB as ispyb_db, get_all_ongoing_visits
3031
from murfey.server.murfey_db import murfey_db
3132
from murfey.util import sanitise
32-
from murfey.util.config import MachineConfig, get_machine_config
33+
from murfey.util.config import MachineConfig
3334
from murfey.util.db import (
3435
AutoProcProgram,
3536
ClientEnvironment,
@@ -418,62 +419,21 @@ def register_batch_position(
418419

419420
@correlative_router.get("/sessions/{session_id}/upstream_visits")
420421
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)
434423

435424

436425
@correlative_router.get(
437426
"/visits/{visit_name}/sessions/{session_id}/upstream_tiff_paths"
438427
)
439428
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)
457430

458431

459432
@correlative_router.get(
460433
"/visits/{visit_name}/sessions/{session_id}/upstream_tiff/{tiff_path:path}"
461434
)
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
465438
)
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

src/murfey/server/api/session_info.py

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from fastapi.responses import FileResponse
88
from pydantic import BaseModel
99
from sqlmodel import select
10-
from werkzeug.utils import secure_filename
1110

1211
import murfey.server.api.websocket as ws
1312
from murfey.server import _transport_object
@@ -18,18 +17,20 @@
1817
validate_token,
1918
)
2019
from murfey.server.api.shared import (
20+
find_upstream_visits as _find_upstream_visits,
21+
gather_upstream_tiffs as _gather_upstream_tiffs,
2122
get_foil_hole as _get_foil_hole,
2223
get_foil_holes_from_grid_square as _get_foil_holes_from_grid_square,
2324
get_grid_squares as _get_grid_squares,
2425
get_grid_squares_from_dcg as _get_grid_squares_from_dcg,
2526
get_machine_config_for_instrument,
26-
get_upstream_tiff_dirs,
27+
get_tiff_file as _get_tiff_file,
2728
remove_session_by_id,
2829
)
2930
from murfey.server.ispyb import DB as ispyb_db, get_all_ongoing_visits
3031
from murfey.server.murfey_db import murfey_db
3132
from murfey.util import sanitise
32-
from murfey.util.config import MachineConfig, get_machine_config
33+
from murfey.util.config import MachineConfig
3334
from murfey.util.db import (
3435
ClientEnvironment,
3536
DataCollection,
@@ -412,62 +413,21 @@ def get_tilts(
412413

413414
@correlative_router.get("/sessions/{session_id}/upstream_visits")
414415
async def find_upstream_visits(session_id: MurfeySessionID, db=murfey_db):
415-
murfey_session = db.exec(select(Session).where(Session.id == session_id)).one()
416-
visit_name = murfey_session.visit
417-
instrument_name = murfey_session.instrument_name
418-
machine_config = get_machine_config(instrument_name=instrument_name)[
419-
instrument_name
420-
]
421-
upstream_visits = {}
422-
# Iterates through provided upstream directories
423-
for p in machine_config.upstream_data_directories:
424-
# Looks for visit name in file path
425-
for v in Path(p).glob(f"{visit_name.split('-')[0]}-*"):
426-
upstream_visits[v.name] = v / machine_config.processed_directory_name
427-
return upstream_visits
416+
return _find_upstream_visits(session_id=session_id, db=db)
428417

429418

430419
@correlative_router.get(
431420
"/visits/{visit_name}/sessions/{session_id}/upstream_tiff_paths"
432421
)
433422
async def gather_upstream_tiffs(visit_name: str, session_id: int, db=murfey_db):
434-
"""
435-
Looks for TIFF files associated with the current session in the permitted storage
436-
servers, and returns their relative file paths as a list.
437-
"""
438-
instrument_name = (
439-
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
440-
)
441-
upstream_tiff_paths = []
442-
tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name)
443-
if not tiff_dirs:
444-
return None
445-
for tiff_dir in tiff_dirs:
446-
for f in tiff_dir.glob("**/*.tiff"):
447-
upstream_tiff_paths.append(str(f.relative_to(tiff_dir)))
448-
for f in tiff_dir.glob("**/*.tif"):
449-
upstream_tiff_paths.append(str(f.relative_to(tiff_dir)))
450-
return upstream_tiff_paths
423+
return _gather_upstream_tiffs(visit_name=visit_name, session_id=session_id, db=db)
451424

452425

453426
@correlative_router.get(
454427
"/visits/{visit_name}/sessions/{session_id}/upstream_tiff/{tiff_path:path}"
455428
)
456-
async def get_tiff(visit_name: str, session_id: int, tiff_path: str, db=murfey_db):
457-
instrument_name = (
458-
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
429+
async def get_tiff_file(visit_name: str, session_id: int, tiff_path: str, db=murfey_db):
430+
tiff_file = _get_tiff_file(
431+
visit_name=visit_name, session_id=session_id, tiff_path=tiff_path, db=db
459432
)
460-
tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name)
461-
if not tiff_dirs:
462-
return None
463-
464-
tiff_path = "/".join(secure_filename(p) for p in tiff_path.split("/"))
465-
for tiff_dir in tiff_dirs:
466-
test_path = tiff_dir / tiff_path
467-
if test_path.is_file():
468-
break
469-
else:
470-
logger.warning(f"TIFF {tiff_path} not found")
471-
return None
472-
473-
return FileResponse(path=test_path)
433+
return FileResponse(path=tiff_file) if isinstance(tiff_file, Path) else tiff_file

src/murfey/server/api/shared.py

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Dict, List, Optional
55

66
from sqlmodel import select
7+
from sqlmodel.orm.session import Session as SQLModelSession
78
from werkzeug.utils import secure_filename
89

910
import murfey.server.prometheus as prom
@@ -16,7 +17,7 @@
1617
GridSquare,
1718
ProcessingJob,
1819
RsyncInstance,
19-
Session,
20+
Session as MurfeySession,
2021
)
2122

2223
logger = logging.getLogger("murfey.server.api.shared")
@@ -32,9 +33,9 @@ def get_machine_config_for_instrument(instrument_name: str) -> Optional[MachineC
3233

3334

3435
def remove_session_by_id(session_id: int, db):
35-
session = db.exec(select(Session).where(Session.id == session_id)).one()
36+
session = db.exec(select(MurfeySession).where(MurfeySession.id == session_id)).one()
3637
sessions_for_visit = db.exec(
37-
select(Session).where(Session.visit == session.visit)
38+
select(MurfeySession).where(MurfeySession.visit == session.visit)
3839
).all()
3940
# Don't remove prometheus metrics if there are other sessions using them
4041
if len(sessions_for_visit) == 1:
@@ -145,6 +146,24 @@ def get_foil_hole(session_id: int, fh_name: int, db) -> Dict[str, int]:
145146
return {f[1].tag: f[0].id for f in foil_holes}
146147

147148

149+
def find_upstream_visits(session_id: int, db: SQLModelSession):
150+
murfey_session = db.exec(
151+
select(MurfeySession).where(MurfeySession.id == session_id)
152+
).one()
153+
visit_name = murfey_session.visit
154+
instrument_name = murfey_session.instrument_name
155+
machine_config = get_machine_config(instrument_name=instrument_name)[
156+
instrument_name
157+
]
158+
upstream_visits = {}
159+
# Iterates through provided upstream directories
160+
for p in machine_config.upstream_data_directories:
161+
# Looks for visit name in file path
162+
for v in Path(p).glob(f"{visit_name.split('-')[0]}-*"):
163+
upstream_visits[v.name] = v / machine_config.processed_directory_name
164+
return upstream_visits
165+
166+
148167
def get_upstream_tiff_dirs(visit_name: str, instrument_name: str) -> List[Path]:
149168
tiff_dirs = []
150169
machine_config = get_machine_config(instrument_name=instrument_name)[
@@ -161,3 +180,49 @@ def get_upstream_tiff_dirs(visit_name: str, instrument_name: str) -> List[Path]:
161180
f"No candidate directory found for upstream download from visit {sanitise(visit_name)}"
162181
)
163182
return tiff_dirs
183+
184+
185+
def gather_upstream_tiffs(visit_name: str, session_id: int, db: SQLModelSession):
186+
"""
187+
Looks for TIFF files associated with the current session in the permitted storage
188+
servers, and returns their relative file paths as a list.
189+
"""
190+
instrument_name = (
191+
db.exec(select(MurfeySession).where(MurfeySession.id == session_id))
192+
.one()
193+
.instrument_name
194+
)
195+
upstream_tiff_paths = []
196+
tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name)
197+
if not tiff_dirs:
198+
return None
199+
for tiff_dir in tiff_dirs:
200+
for f in tiff_dir.glob("**/*.tiff"):
201+
upstream_tiff_paths.append(str(f.relative_to(tiff_dir)))
202+
for f in tiff_dir.glob("**/*.tif"):
203+
upstream_tiff_paths.append(str(f.relative_to(tiff_dir)))
204+
return upstream_tiff_paths
205+
206+
207+
def get_tiff_file(
208+
visit_name: str, session_id: int, tiff_path: str, db: SQLModelSession
209+
):
210+
instrument_name = (
211+
db.exec(select(MurfeySession).where(MurfeySession.id == session_id))
212+
.one()
213+
.instrument_name
214+
)
215+
tiff_dirs = get_upstream_tiff_dirs(visit_name, instrument_name)
216+
if not tiff_dirs:
217+
return None
218+
219+
tiff_path = "/".join(secure_filename(p) for p in tiff_path.split("/"))
220+
for tiff_dir in tiff_dirs:
221+
tiff_file = tiff_dir / tiff_path
222+
if tiff_file.is_file():
223+
break
224+
else:
225+
logger.warning(f"TIFF {tiff_path} not found")
226+
return None
227+
228+
return tiff_file

src/murfey/util/route_manifest.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ murfey.server.api.session_control.correlative_router:
763763
methods:
764764
- GET
765765
- path: /session_control/correlative/visits/{visit_name}/sessions/{session_id}/upstream_tiff/{tiff_path:path}
766-
function: get_tiff
766+
function: get_tiff_file
767767
path_params:
768768
- name: visit_name
769769
type: str
@@ -986,7 +986,7 @@ murfey.server.api.session_info.correlative_router:
986986
methods:
987987
- GET
988988
- path: /session_info/correlative/visits/{visit_name}/sessions/{session_id}/upstream_tiff/{tiff_path:path}
989-
function: get_tiff
989+
function: get_tiff_file
990990
path_params:
991991
- name: visit_name
992992
type: str

0 commit comments

Comments
 (0)