Skip to content

Commit 6b85156

Browse files
committed
Add an atlas context
1 parent 432c50b commit 6b85156

File tree

2 files changed

+85
-30
lines changed

2 files changed

+85
-30
lines changed

src/murfey/client/analyser.py

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from typing import Type
1616

1717
from murfey.client.context import Context
18+
from murfey.client.contexts.atlas import AtlasContext
1819
from murfey.client.contexts.clem import CLEMContext
1920
from murfey.client.contexts.spa import SPAModularContext
2021
from murfey.client.contexts.spa_metadata import SPAMetadataContext
@@ -135,7 +136,7 @@ def _find_context(self, file_path: Path) -> bool:
135136

136137
# Tomography and SPA workflow checks
137138
if "atlas" in file_path.parts:
138-
self._context = SPAMetadataContext("epu", self._basepath)
139+
self._context = AtlasContext("epu", self._basepath)
139140
return True
140141

141142
if "Metadata" in file_path.parts or file_path.name == "EpuSession.dm":
@@ -266,7 +267,7 @@ def _analyse(self):
266267
)
267268
except Exception as e:
268269
logger.error(f"Exception encountered: {e}")
269-
if "atlas" not in transferred_file.parts:
270+
if not isinstance(self._context, AtlasContext):
270271
if not dc_metadata:
271272
try:
272273
dc_metadata = self._context.gather_metadata(
@@ -308,6 +309,10 @@ def _analyse(self):
308309
)
309310
self.post_transfer(transferred_file)
310311

312+
elif isinstance(self._context, AtlasContext):
313+
logger.debug(f"File {transferred_file.name!r} is part of the atlas")
314+
self.post_transfer(transferred_file)
315+
311316
# Handle files with tomography and SPA context differently
312317
elif not self._extension or self._unseen_xml:
313318
valid_extension = self._find_extension(transferred_file)
@@ -325,36 +330,35 @@ def _analyse(self):
325330
)
326331
except Exception as e:
327332
logger.error(f"Exception encountered: {e}")
328-
if "atlas" not in transferred_file.parts:
329-
if not dc_metadata:
330-
try:
331-
dc_metadata = self._context.gather_metadata(
332-
mdoc_for_reading
333-
or self._xml_file(transferred_file),
334-
environment=self._environment,
335-
)
336-
except KeyError as e:
337-
logger.error(
338-
f"Metadata gathering failed with a key error for key: {e.args[0]}"
339-
)
340-
raise e
341-
if not dc_metadata or not self._force_mdoc_metadata:
342-
mdoc_for_reading = None
343-
self._unseen_xml.append(transferred_file)
344-
if dc_metadata:
345-
self._unseen_xml = []
346-
if dc_metadata.get("file_extension"):
347-
self._extension = dc_metadata["file_extension"]
348-
else:
349-
dc_metadata["file_extension"] = self._extension
350-
dc_metadata["acquisition_software"] = (
351-
self._context._acquisition_software
333+
if not dc_metadata:
334+
try:
335+
dc_metadata = self._context.gather_metadata(
336+
mdoc_for_reading
337+
or self._xml_file(transferred_file),
338+
environment=self._environment,
352339
)
353-
self.notify(
354-
{
355-
"form": dc_metadata,
356-
}
340+
except KeyError as e:
341+
logger.error(
342+
f"Metadata gathering failed with a key error for key: {e.args[0]}"
357343
)
344+
raise e
345+
if not dc_metadata or not self._force_mdoc_metadata:
346+
mdoc_for_reading = None
347+
self._unseen_xml.append(transferred_file)
348+
if dc_metadata:
349+
self._unseen_xml = []
350+
if dc_metadata.get("file_extension"):
351+
self._extension = dc_metadata["file_extension"]
352+
else:
353+
dc_metadata["file_extension"] = self._extension
354+
dc_metadata["acquisition_software"] = (
355+
self._context._acquisition_software
356+
)
357+
self.notify(
358+
{
359+
"form": dc_metadata,
360+
}
361+
)
358362
elif isinstance(
359363
self._context,
360364
(
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import logging
2+
from pathlib import Path
3+
from typing import Optional
4+
5+
import requests
6+
7+
from murfey.client.context import Context
8+
from murfey.client.contexts.spa import _get_source
9+
from murfey.client.contexts.spa_metadata import _atlas_destination
10+
from murfey.client.instance_environment import MurfeyInstanceEnvironment
11+
from murfey.util.api import url_path_for
12+
from murfey.util.client import authorised_requests, capture_post
13+
14+
logger = logging.getLogger("murfey.client.contexts.spa_metadata")
15+
16+
requests.get, requests.post, requests.put, requests.delete = authorised_requests()
17+
18+
19+
class AtlasContext(Context):
20+
def __init__(self, acquisition_software: str, basepath: Path):
21+
super().__init__("Atlas", acquisition_software)
22+
self._basepath = basepath
23+
24+
def post_transfer(
25+
self,
26+
transferred_file: Path,
27+
environment: Optional[MurfeyInstanceEnvironment] = None,
28+
**kwargs,
29+
):
30+
super().post_transfer(
31+
transferred_file=transferred_file,
32+
environment=environment,
33+
**kwargs,
34+
)
35+
36+
if (
37+
environment
38+
and "Atlas_" in transferred_file.stem
39+
and transferred_file.suffix == ".mrc"
40+
):
41+
source = _get_source(transferred_file, environment)
42+
if source:
43+
transferred_atlas_name = (
44+
_atlas_destination(environment, source, transferred_file)
45+
/ environment.samples[source].atlas.parent
46+
/ transferred_file.name
47+
)
48+
capture_post(
49+
f"{str(environment.url.geturl())}{url_path_for('session_control.spa_router', 'make_atlas_jpg', session_id=environment.murfey_session)}",
50+
json={"atlas_mrc": transferred_atlas_name},
51+
)

0 commit comments

Comments
 (0)