Skip to content

Commit 90db284

Browse files
committed
Move most context API calls to use a lookup based on function name rather than hard-coding the URLs
1 parent 0538013 commit 90db284

File tree

8 files changed

+119
-112
lines changed

8 files changed

+119
-112
lines changed

src/murfey/client/__init__.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,25 @@
2525
from murfey.client.instance_environment import MurfeyInstanceEnvironment
2626
from murfey.client.tui.app import MurfeyTUI
2727
from murfey.client.tui.status_bar import StatusBar
28-
from murfey.util.client import _get_visit_list, authorised_requests, read_config
28+
from murfey.util.client import authorised_requests, read_config
29+
from murfey.util.models import Visit
2930

3031
log = logging.getLogger("murfey.client")
3132

3233
requests.get, requests.post, requests.put, requests.delete = authorised_requests()
3334

3435

36+
def _get_visit_list(api_base: ParseResult, instrument_name: str):
37+
proxy_path = api_base.path.rstrip("/")
38+
get_visits_url = api_base._replace(
39+
path=f"{proxy_path}/instruments/{instrument_name}/visits_raw"
40+
)
41+
server_reply = requests.get(get_visits_url.geturl())
42+
if server_reply.status_code != 200:
43+
raise ValueError(f"Server unreachable ({server_reply.status_code})")
44+
return [Visit.parse_obj(v) for v in server_reply.json()]
45+
46+
3547
def write_config(config: configparser.ConfigParser):
3648
mcch = os.environ.get("MURFEY_CLIENT_CONFIG_HOME")
3749
murfey_client_config_home = Path(mcch) if mcch else Path.home()

src/murfey/client/contexts/spa.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
MurfeyID,
1616
MurfeyInstanceEnvironment,
1717
)
18+
from murfey.server.api.file_manip import router as file_manip_router
19+
from murfey.server.api.workflow import spa_router as workflow_spa_router
1820
from murfey.util.client import (
1921
authorised_requests,
2022
capture_get,
@@ -580,7 +582,7 @@ def post_transfer(
580582
eer_fractionation_file = None
581583
if file_transferred_to.suffix == ".eer":
582584
response = capture_post(
583-
f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/eer_fractionation_file",
585+
f"{str(environment.url.geturl())}{file_manip_router.url_path_for('write_eer_fractionation_file', visit_name=environment.visit, session_id=environment.murfey_session)}",
584586
json={
585587
"eer_path": str(file_transferred_to),
586588
"fractionation": environment.data_collection_parameters[
@@ -609,7 +611,7 @@ def post_transfer(
609611
)
610612
foil_hole = None
611613

612-
preproc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/spa_preprocess"
614+
preproc_url = f"{str(environment.url.geturl())}{workflow_spa_router.url_path_for('request_spa_preprocessing', visit_name=environment.visit, session_id=environment.murfey_session)}"
613615
preproc_data = {
614616
"path": str(file_transferred_to),
615617
"description": "",

src/murfey/client/contexts/spa_metadata.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from murfey.client.context import Context
99
from murfey.client.contexts.spa import _file_transferred_to, _get_source
1010
from murfey.client.instance_environment import MurfeyInstanceEnvironment, SampleInfo
11+
from murfey.server.api.workflow import router as workflow_router
1112
from murfey.util.client import (
1213
authorised_requests,
1314
capture_post,
@@ -166,7 +167,7 @@ def post_transfer(
166167
environment.samples[source] = SampleInfo(
167168
atlas=Path(partial_path), sample=sample
168169
)
169-
url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_data_collection_group"
170+
url = f"{str(environment.url.geturl())}{workflow_router.url_path_for('register_dc_group', visit_name=environment.visit, session_id=environment.murfey_session)}"
170171
dcg_search_dir = "/".join(
171172
p for p in transferred_file.parent.parts if p != environment.visit
172173
)
@@ -221,7 +222,7 @@ def post_transfer(
221222
and environment
222223
):
223224
# Make sure we have a data collection group before trying to register grid square
224-
url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_data_collection_group"
225+
url = f"{str(environment.url.geturl())}{workflow_router.url_path_for('register_dc_group', visit_name=environment.visit, session_id=environment.murfey_session)}"
225226
dcg_search_dir = "/".join(
226227
p
227228
for p in transferred_file.parent.parent.parts

src/murfey/client/contexts/tomo.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
MurfeyID,
1818
MurfeyInstanceEnvironment,
1919
)
20+
from murfey.server.api.file_manip import router as file_manip_router
21+
from murfey.server.api.workflow import router as workflow_router
22+
from murfey.server.api.workflow import tomo_router as workflow_tomo_router
2023
from murfey.util.client import (
2124
authorised_requests,
2225
capture_post,
@@ -109,7 +112,7 @@ def register_tomography_data_collections(
109112
)
110113
return
111114
try:
112-
dcg_url = f"{str(environment.url.geturl())}/visits/{str(environment.visit)}/{environment.murfey_session}/register_data_collection_group"
115+
dcg_url = f"{str(environment.url.geturl())}{workflow_router.url_path_for('register_dc_group', visit_name=environment.visit, session_id=environment.murfey_session)}"
113116
dcg_data = {
114117
"experiment_type": "tomo",
115118
"experiment_type_id": 36,
@@ -121,7 +124,7 @@ def register_tomography_data_collections(
121124

122125
for tilt_series in self._tilt_series.keys():
123126
if tilt_series not in self._tilt_series_with_pjids:
124-
dc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/start_data_collection"
127+
dc_url = f"{str(environment.url.geturl())}{workflow_router.url_path_for('start_dc', visit_name=environment.visit, session_id=environment.murfey_session)}"
125128
dc_data = {
126129
"experiment_type": "tomography",
127130
"file_extension": file_extension,
@@ -157,7 +160,7 @@ def register_tomography_data_collections(
157160
)
158161
capture_post(dc_url, json=dc_data)
159162

160-
proc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_processing_job"
163+
proc_url = f"{str(environment.url.geturl())}{workflow_router.url_path_for('register_proc', visit_name=environment.visit, session_id=environment.murfey_session)}"
161164
for recipe in ("em-tomo-preprocess", "em-tomo-align"):
162165
capture_post(
163166
proc_url,
@@ -262,7 +265,7 @@ def _add_tilt(
262265
f"Tilt series {tilt_series} was previously thought complete but now {file_path} has been seen"
263266
)
264267
self._completed_tilt_series.remove(tilt_series)
265-
rerun_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/rerun_tilt_series"
268+
rerun_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('register_tilt_series_for_rerun', visit_name=environment.visit)}"
266269
rerun_data = {
267270
"session_id": environment.murfey_session,
268271
"tag": tilt_series,
@@ -276,7 +279,7 @@ def _add_tilt(
276279
if not self._tilt_series.get(tilt_series):
277280
logger.info(f"New tilt series found: {tilt_series}")
278281
self._tilt_series[tilt_series] = [file_path]
279-
ts_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/tilt_series"
282+
ts_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('register_tile_series', visit_name=environment.visit)}"
280283
ts_data = {
281284
"session_id": environment.murfey_session,
282285
"tag": tilt_series,
@@ -305,7 +308,7 @@ def _add_tilt(
305308
self._tilt_series[tilt_series].append(file_path)
306309

307310
if environment:
308-
tilt_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/tilt"
311+
tilt_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('register_tilt', visit_name=environment.visit, session_id=environment.murfey_session)}"
309312
tilt_data = {
310313
"movie_path": str(file_transferred_to),
311314
"tilt_series_tag": tilt_series,
@@ -316,7 +319,7 @@ def _add_tilt(
316319
eer_fractionation_file = None
317320
if environment.data_collection_parameters.get("num_eer_frames"):
318321
response = requests.post(
319-
f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/eer_fractionation_file",
322+
f"{str(environment.url.geturl())}{file_manip_router.url_path_for('write_eer_fractionation_file', visit_name=environment.visit, session_id=environment.murfey_session)}",
320323
json={
321324
"num_frames": environment.data_collection_parameters[
322325
"num_eer_frames"
@@ -331,7 +334,7 @@ def _add_tilt(
331334
},
332335
)
333336
eer_fractionation_file = response.json()["eer_fractionation_file"]
334-
preproc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/tomography_preprocess"
337+
preproc_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('request_tomography_preprocessing', visit_name=environment.visit, session_id=environment.murfey_session)}"
335338
preproc_data = {
336339
"path": str(file_transferred_to),
337340
"description": "",
@@ -491,7 +494,7 @@ def post_transfer(
491494

492495
# Always update the tilt series length in the database after an mdoc
493496
if environment.murfey_session is not None:
494-
length_url = f"{str(environment.url.geturl())}/sessions/{environment.murfey_session}/tilt_series_length"
497+
length_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('register_tile_series_length', session_id=environment.murfey_session)}"
495498
capture_post(
496499
length_url,
497500
json={
@@ -508,7 +511,7 @@ def post_transfer(
508511
f"The following tilt series are considered complete: {completed_tilts} "
509512
f"after {transferred_file}"
510513
)
511-
complete_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/completed_tilt_series"
514+
complete_url = f"{str(environment.url.geturl())}{workflow_tomo_router.url_path_for('register_completed_tilt_series', visit_name=environment.visit, session_id=environment.murfey_session)}"
512515
capture_post(
513516
complete_url,
514517
json={

src/murfey/server/api/session_info.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
Tilt,
2929
TiltSeries,
3030
)
31+
from murfey.util.models import Visit
3132

3233
logger = getLogger("murfey.server.api.session_info")
3334

@@ -38,27 +39,6 @@
3839
)
3940

4041

41-
class Visit(BaseModel):
42-
start: datetime
43-
end: datetime
44-
session_id: int
45-
name: str
46-
beamline: str
47-
proposal_title: str
48-
49-
def __repr__(self) -> str:
50-
return (
51-
"Visit("
52-
f"start='{self.start:%Y-%m-%d %H:%M}', "
53-
f"end='{self.end:%Y-%m-%d %H:%M}', "
54-
f"session_id='{self.session_id!r}',"
55-
f"name={self.name!r}, "
56-
f"beamline={self.beamline!r}, "
57-
f"proposal_title={self.proposal_title!r}"
58-
")"
59-
)
60-
61-
6242
@router.get("/instruments/{instrument_name}/visits_raw", response_model=List[Visit])
6343
def get_current_visits(instrument_name: str, db=murfey.server.ispyb.DB):
6444
return murfey.server.ispyb.get_all_ongoing_visits(instrument_name, db)

src/murfey/server/api/workflow.py

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
Tilt,
4444
TiltSeries,
4545
)
46+
from murfey.util.models import ProcessingParametersSPA, ProcessingParametersTomo
4647
from murfey.util.processing_params import default_spa_parameters
4748
from murfey.util.tomo import midpoint
4849

@@ -273,45 +274,6 @@ def register_proc(
273274
)
274275

275276

276-
class ProcessingParametersSPA(BaseModel):
277-
tag: str
278-
dose_per_frame: float
279-
gain_ref: Optional[str]
280-
experiment_type: str
281-
voltage: float
282-
image_size_x: int
283-
image_size_y: int
284-
pixel_size_on_image: str
285-
motion_corr_binning: int
286-
file_extension: str
287-
acquisition_software: str
288-
use_cryolo: bool
289-
symmetry: str
290-
mask_diameter: Optional[int]
291-
boxsize: Optional[int]
292-
downscale: bool
293-
small_boxsize: Optional[int]
294-
eer_fractionation_file: str = ""
295-
particle_diameter: Optional[float]
296-
magnification: Optional[int] = None
297-
total_exposed_dose: Optional[float] = None
298-
c2aperture: Optional[float] = None
299-
exposure_time: Optional[float] = None
300-
slit_width: Optional[float] = None
301-
phase_plate: bool = False
302-
303-
class Base(BaseModel):
304-
dose_per_frame: Optional[float]
305-
gain_ref: Optional[str]
306-
use_cryolo: bool
307-
symmetry: str
308-
mask_diameter: Optional[int]
309-
boxsize: Optional[int]
310-
downscale: bool
311-
small_boxsize: Optional[int]
312-
eer_fractionation: int
313-
314-
315277
@spa_router.post("/sessions/{session_id}/spa_processing_parameters")
316278
def register_spa_proc_params(
317279
session_id: MurfeySessionID, proc_params: ProcessingParametersSPA, db=murfey_db
@@ -541,29 +503,6 @@ async def request_spa_preprocessing(
541503
)
542504

543505

544-
class ProcessingParametersTomo(BaseModel):
545-
dose_per_frame: Optional[float]
546-
frame_count: int
547-
tilt_axis: float
548-
gain_ref: Optional[str]
549-
experiment_type: str
550-
voltage: float
551-
image_size_x: int
552-
image_size_y: int
553-
pixel_size_on_image: str
554-
motion_corr_binning: int
555-
file_extension: str
556-
tag: str
557-
tilt_series_tag: str
558-
eer_fractionation_file: Optional[str]
559-
eer_fractionation: int
560-
561-
class Base(BaseModel):
562-
dose_per_frame: Optional[float]
563-
gain_ref: Optional[str]
564-
eer_fractionation: int
565-
566-
567506
@tomo_router.post("/sessions/{session_id}/tomography_processing_parameters")
568507
def register_tomo_proc_params(
569508
session_id: MurfeySessionID, proc_params: ProcessingParametersTomo, db=murfey_db

src/murfey/util/client.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
from functools import lru_cache, partial
1818
from pathlib import Path
1919
from typing import Awaitable, Callable, Optional, Union
20-
from urllib.parse import ParseResult, urlparse, urlunparse
20+
from urllib.parse import urlparse, urlunparse
2121

2222
import requests
2323

24-
from murfey.util.models import Visit
25-
2624
logger = logging.getLogger("murfey.util.client")
2725

2826

@@ -74,17 +72,6 @@ def authorised_requests() -> tuple[Callable, Callable, Callable, Callable]:
7472
requests.get, requests.post, requests.put, requests.delete = authorised_requests()
7573

7674

77-
def _get_visit_list(api_base: ParseResult, instrument_name: str):
78-
proxy_path = api_base.path.rstrip("/")
79-
get_visits_url = api_base._replace(
80-
path=f"{proxy_path}/instruments/{instrument_name}/visits_raw"
81-
)
82-
server_reply = requests.get(get_visits_url.geturl())
83-
if server_reply.status_code != 200:
84-
raise ValueError(f"Server unreachable ({server_reply.status_code})")
85-
return [Visit.parse_obj(v) for v in server_reply.json()]
86-
87-
8875
def capture_post(url: str, json: Union[dict, list] = {}) -> Optional[requests.Response]:
8976
try:
9077
response = requests.post(url, json=json)

0 commit comments

Comments
 (0)