Skip to content

Commit 20bd7d3

Browse files
committed
Acquisition and Grid entities persist end-to-end
1 parent 829fbb3 commit 20bd7d3

20 files changed

+1646
-1358
lines changed

docs/how-to/use-core-http-api-client.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ acquisitions = await client.aget_acquisitions()
6868
### Creating an Acquisition
6969

7070
```python
71-
from src.epu_data_intake.data_model import EpuSessionData
71+
from src.epu_data_intake.model.schemas import EpuSessionData
7272
from datetime import datetime
7373

7474
# Create an acquisition from EPU session data
@@ -139,22 +139,26 @@ Here's an example of creating entities at each level:
139139
acquisition = client.create_acquisition(EpuSessionData(id="acq-1", name="Test Acquisition"))
140140

141141
# Create a grid for the acquisition
142-
from src.epu_data_intake.data_model import Grid
143-
grid = Grid(data_dir="/path/to/grid")
142+
from src.epu_data_intake.model.schemas import GridData
143+
144+
grid = GridData(data_dir="/path/to/grid")
144145
grid_response = client.create_acquisition_grid(acquisition.id, grid)
145146

146147
# Create a grid square for the grid
147-
from src.epu_data_intake.data_model import GridSquareData
148+
from src.epu_data_intake.model.schemas import GridSquareData
149+
148150
gridsquare = GridSquareData(id="gs-1", data_dir="/path/to/gridsquare")
149151
gridsquare_response = client.create_grid_gridsquare(grid_response.id, gridsquare)
150152

151153
# Create a foil hole for the grid square
152-
from src.epu_data_intake.data_model import FoilHoleData
154+
from src.epu_data_intake.model.schemas import FoilHoleData
155+
153156
foilhole = FoilHoleData(id="fh-1", gridsquare_id=gridsquare.id)
154157
foilhole_response = client.create_gridsquare_foilhole(gridsquare_response.id, foilhole)
155158

156159
# Create a micrograph for the foil hole
157-
from src.epu_data_intake.data_model import MicrographData, MicrographManifest
160+
from src.epu_data_intake.model.schemas import MicrographData, MicrographManifest
161+
158162
manifest = MicrographManifest(
159163
unique_id="mic-1",
160164
acquisition_datetime=datetime.now(),

docs/software-architecture.mermaid

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
graph LR
1+
graph TD
22
subgraph k8s["Kubernetes Cluster (Scientific Compute)"]
33
subgraph core["Core Services"]
44
api["SmartEM Core Service & API"]
@@ -44,4 +44,4 @@ graph LR
4444
class infrastructure infra
4545
class ext ext
4646
%% Link styling
47-
linkStyle 0,1,2,3,4,5,6,7,8 stroke:#666
47+
linkStyle 0,1,2,3,4,5,6,7,8 stroke:#666

src/epu_data_intake/__main__.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from watchdog.observers import Observer
1010

1111
from src.epu_data_intake.core_http_api_client import SmartEMAPIClient as APIClient
12-
from src.epu_data_intake.data_model import EpuAcquisitionSessionStore
12+
from src.epu_data_intake.model.store import InMemoryDataStore, PersistentDataStore
1313
from src.epu_data_intake.fs_parser import EpuParser
1414
from src.epu_data_intake.fs_watcher import (
1515
DEFAULT_PATTERNS,
@@ -72,15 +72,22 @@ def parse_callback(verbose: int = shared_verbosity_option):
7272
"""Parse group callback to enable verbose flag on parse command"""
7373
pass
7474

75+
7576
@parse_cli.command("dir")
7677
def parse_epu_output_dir(
77-
epu_output_dir: str,
78-
verbose: int = shared_verbosity_option,
78+
epu_output_dir: str,
79+
verbose: int = shared_verbosity_option,
7980
):
8081
"""Parse an entire EPU output directory structure. May contain multiple grids"""
81-
datastore = EpuAcquisitionSessionStore(epu_output_dir)
82+
# Rationale here is that parsers don't persist data to API by design - only watch command does that
83+
datastore = InMemoryDataStore(epu_output_dir)
84+
85+
# Initialize the acquisition_rels dict with a set for the acquisition
86+
datastore.acquisition_rels[datastore.acquisition.uuid] = set()
87+
88+
# The EpuParser.parse_epu_output_dir would need to be updated to work with the new store
8289
datastore = EpuParser.parse_epu_output_dir(datastore)
83-
logging.info(datastore)
90+
False and logging.debug(datastore)
8491

8592

8693
@parse_cli.command("grid")
@@ -91,12 +98,14 @@ def parse_grid(
9198
is_valid, errors = EpuParser.validate_project_dir(Path(grid_data_dir))
9299

93100
if not is_valid:
94-
logging.info("Grid data dir dir is structurally invalid. Found the following issues:\n")
101+
logging.warning("Grid data dir dir is structurally invalid. Found the following issues:\n")
95102
for error in errors:
96-
logging.info(f"- {error}")
103+
logging.warning(f"- {error}")
97104
else:
98-
gridstore = EpuParser.parse_grid_dir(grid_data_dir)
99-
logging.info(gridstore)
105+
# Rationale here is that parsers don't persist data to API by design - only watch command does that
106+
datastore = InMemoryDataStore(grid_data_dir) # TODO confirm this is the dir expected here - top-level watch dir or grid root dir?
107+
grid_uuid = EpuParser.parse_grid_dir(grid_data_dir, datastore)
108+
False and logging.debug(datastore)
100109

101110

102111
@parse_cli.command("session")

0 commit comments

Comments
 (0)