From 5a0047b6d5eaee3d18091be81d788b6b64608d23 Mon Sep 17 00:00:00 2001 From: GotthardG <51994228+GotthardG@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:51:07 +0100 Subject: [PATCH] Refactor AareDB backend and update schemas and paths. Revised backend schema definitions, removing unnecessary attributes and adding new configurations. Updated file path references to align with the aaredb structure. Cleaned up redundant notebook content and commented out unused database regeneration logic in the backend. Added posting a result to the database --- backend/app/models.py | 10 +- backend/app/routers/sample.py | 116 ++- backend/app/schemas.py | 46 +- backend/main.py | 4 +- backend/tests/test_results.py | 0 frontend/fetch-openapi.js | 6 +- frontend/src/components/ResultGrid.tsx | 50 +- testfunctions.ipynb | 1046 +++++------------------- 8 files changed, 355 insertions(+), 923 deletions(-) create mode 100644 backend/tests/test_results.py diff --git a/backend/app/models.py b/backend/app/models.py index 2a848fb..c4d9793 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -278,10 +278,14 @@ class Results(Base): __tablename__ = "results" id = Column(Integer, primary_key=True, index=True, autoincrement=True) - # pgroup = Column(String(255), nullable=False) - result = Column(JSON, nullable=True) - result_id = Column(Integer, ForeignKey("experiment_parameters.id"), nullable=False) + result = Column(JSON, nullable=False) # store the full result object as JSON sample_id = Column(Integer, ForeignKey("samples.id"), nullable=False) + run_id = Column(Integer, ForeignKey("experiment_parameters.id"), nullable=False) + + # optional relationships if you wish to query easily + # sample = relationship("SampleModel", backref="results") + # experiment_parameters = relationship("ExperimentParametersModel", + # backref="results") # method = Column(String(255), nullable=False) diff --git a/backend/app/routers/sample.py b/backend/app/routers/sample.py index 465719b..4f89135 100644 --- a/backend/app/routers/sample.py +++ b/backend/app/routers/sample.py @@ -14,8 +14,9 @@ from app.schemas import ( SampleResult, ExperimentParametersCreate, ExperimentParametersRead, - # ResultResponse, - # ResultCreate, + ImageInfo, + ResultResponse, + ResultCreate, ) from app.models import ( Puck as PuckModel, @@ -25,7 +26,7 @@ from app.models import ( Dewar as DewarModel, ExperimentParameters as ExperimentParametersModel, # ExperimentParameters, - # Results, + Results as ResultsModel, ) from app.dependencies import get_db import logging @@ -246,8 +247,13 @@ async def get_sample_results(active_pgroup: str, db: Session = Depends(get_db)): results = [] for sample in samples: - # Query images associated with the sample. - images = db.query(ImageModel).filter(ImageModel.sample_id == sample.id).all() + # Query images associated with the sample, including the related event_type + images = ( + db.query(ImageModel) + .options(joinedload(ImageModel.sample_event)) + .filter(ImageModel.sample_id == sample.id) + .all() + ) # Query experiment parameters (which include beamline parameters) for the # sample. @@ -259,27 +265,34 @@ async def get_sample_results(active_pgroup: str, db: Session = Depends(get_db)): print("Experiment Parameters for sample", sample.id, experiment_parameters) results.append( - { - "sample_id": sample.id, - "sample_name": sample.sample_name, - "puck_name": sample.puck.puck_name if sample.puck else None, - "dewar_name": sample.puck.dewar.dewar_name + SampleResult( + sample_id=sample.id, + sample_name=sample.sample_name, + puck_name=sample.puck.puck_name if sample.puck else None, + dewar_name=sample.puck.dewar.dewar_name if (sample.puck and sample.puck.dewar) else None, - "images": [ - {"id": img.id, "filepath": img.filepath, "comment": img.comment} + images=[ + ImageInfo( + id=img.id, + filepath=img.filepath, + event_type=img.sample_event.event_type + if img.sample_event + else "Unknown", + comment=img.comment, + ) for img in images ], - "experiment_runs": [ - { - "id": ex.id, - "run_number": ex.run_number, - "beamline_parameters": ex.beamline_parameters, - "sample_id": ex.sample_id, - } + experiment_runs=[ + ExperimentParametersRead( + id=ex.id, + run_number=ex.run_number, + beamline_parameters=ex.beamline_parameters, + sample_id=ex.sample_id, + ) for ex in experiment_parameters ], - } + ) ) return results @@ -318,32 +331,49 @@ def create_experiment_parameters_for_sample( db.commit() db.refresh(new_exp) + # Create a "Collecting" sample event associated with the new experiment parameters + new_event = SampleEventModel( + sample_id=sample_id, + event_type="Collecting", # The event type + timestamp=datetime.now(), # Use current timestamp + ) + db.add(new_event) + db.commit() + return new_exp -# @router.post("/results", response_model=ResultResponse) -# def create_result(result: ResultCreate, db: Session = Depends(get_db)): -# # Validate sample_id and result_id (optional but recommended) -# sample = db.query(SampleModel).filter_by(id=result.sample_id).first() -# if not sample: -# raise HTTPException(status_code=404, detail="Sample not found") -# -# experiment = db.query(ExperimentParameters).filter_by(id=result.result_id).first() -# if not experiment: -# raise HTTPException(status_code=404, detail="Experiment parameters not found") -# -# # Create a new Results entry -# result_obj = Results( -# sample_id=result.sample_id, -# result_id=result.result_id, -# result=result.result -# ) -# db.add(result_obj) -# db.commit() -# db.refresh(result_obj) -# -# return result_obj -# +@router.post("/processing-results", response_model=ResultResponse) +def create_result(payload: ResultCreate, db: Session = Depends(get_db)): + # Check experiment existence + experiment = ( + db.query(ExperimentParametersModel) + .filter(ExperimentParametersModel.id == payload.run_id) + .first() + ) + if not experiment: + raise HTTPException( + status_code=404, detail="Experiment parameters (run) not found" + ) + + result_entry = ResultsModel( + sample_id=payload.sample_id, + run_id=payload.run_id, + result=payload.result.model_dump(), # Serialize entire result to JSON + ) + + db.add(result_entry) + db.commit() + db.refresh(result_entry) + + return ResultResponse( + id=result_entry.id, + sample_id=result_entry.sample_id, + run_id=result_entry.run_id, + result=payload.result, # return original payload directly + ) + + # @router.get("/results", response_model=list[ResultResponse]) # def get_results(sample_id: int, result_id: int, db: Session = Depends(get_db)): # query = db.query(Results) diff --git a/backend/app/schemas.py b/backend/app/schemas.py index c00d2cb..1566b42 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -352,16 +352,6 @@ class SampleEventCreate(BaseModel): event_type: Literal[ "Mounting", "Centering", "Failed", "Lost", "Collecting", "Unmounting" ] - # event_type: str - # Validate event_type against accepted event types - # @field_validator("event_type", mode="before") - # def validate_event_type(cls, value): - # allowed = {"Mounting", "Centering", "Failed", - # "Lost", "Collecting", "Unmounting"} - # if value not in allowed: - # raise ValueError(f"Invalid event_type: {value}. - # Accepted values are: {allowed}") - # return value class SampleEventResponse(SampleEventCreate): @@ -374,10 +364,7 @@ class SampleEventResponse(SampleEventCreate): class Results(BaseModel): - id: int - pgroup: str - sample_id: int - method: str + pipeline: str resolution: float unit_cell: str spacegroup: str @@ -393,10 +380,6 @@ class Results(BaseModel): unique_refl: int comments: Optional[constr(max_length=200)] = None - # Define attributes for Results here - class Config: - from_attributes = True - class ContactCreate(BaseModel): pgroups: str @@ -822,6 +805,21 @@ class ImageInfo(BaseModel): id: int filepath: str comment: Optional[str] = None + event_type: str + # run_number: Optional[int] + + class Config: + from_attributes = True + + +class characterizationParameters(BaseModel): + omegaStart_deg: float + oscillation_deg: float + omegaStep: float + chi: float + phi: float + numberOfImages: int + exposureTime_s: float class RotationParameters(BaseModel): @@ -882,6 +880,7 @@ class BeamlineParameters(BaseModel): beamSizeWidth: Optional[float] = None beamSizeHeight: Optional[float] = None # dose_MGy: float + characterization: Optional[characterizationParameters] = None rotation: Optional[RotationParameters] = None gridScan: Optional[gridScanParamers] = None jet: Optional[jetParameters] = None @@ -922,15 +921,18 @@ class SampleResult(BaseModel): class ResultCreate(BaseModel): sample_id: int - result_id: int - result: Optional[dict] + run_id: int + result: Results + + class Config: + from_attributes = True class ResultResponse(BaseModel): id: int sample_id: int - result_id: int - result: Optional[dict] + run_id: int + result: Results class Config: from_attributes = True diff --git a/backend/main.py b/backend/main.py index 272c5fa..228bcec 100644 --- a/backend/main.py +++ b/backend/main.py @@ -156,8 +156,8 @@ def on_startup(): load_slots_data(db) else: # dev or test environments print(f"{environment.capitalize()} environment: Regenerating database.") - Base.metadata.drop_all(bind=engine) - Base.metadata.create_all(bind=engine) + # Base.metadata.drop_all(bind=engine) + # Base.metadata.create_all(bind=engine) # from sqlalchemy.engine import reflection # from app.models import ExperimentParameters # adjust the import as needed # inspector = reflection.Inspector.from_engine(engine) diff --git a/backend/tests/test_results.py b/backend/tests/test_results.py new file mode 100644 index 0000000..e69de29 diff --git a/frontend/fetch-openapi.js b/frontend/fetch-openapi.js index 2166ff8..e718fe7 100644 --- a/frontend/fetch-openapi.js +++ b/frontend/fetch-openapi.js @@ -171,12 +171,12 @@ async function fetchAndGenerate() { const backendDirectory = (() => { switch (nodeEnv) { case 'prod': - return path.resolve('/home/jungfrau/heidi-v2/backend/app'); // Production path + return path.resolve('/home/jungfrau/aaredb/backend/app'); // Production path case 'test': - return path.resolve('/home/jungfrau/heidi-v2/backend/app'); // Test path + return path.resolve('/home/jungfrau/aaredb/backend/app'); // Test path case 'dev': default: - return path.resolve('/Users/gotthardg/PycharmProjects/heidi-v2/backend/app'); // Development path + return path.resolve('/Users/gotthardg/PycharmProjects/aaredb/backend/app'); // Development path } })(); diff --git a/frontend/src/components/ResultGrid.tsx b/frontend/src/components/ResultGrid.tsx index 09ad8da..cfc6228 100644 --- a/frontend/src/components/ResultGrid.tsx +++ b/frontend/src/components/ResultGrid.tsx @@ -11,6 +11,8 @@ interface ImageInfo { id: number; filepath: string; comment?: string; + event_type: string; + run_number?:number; } // This represents an experiment run as returned by your API. @@ -87,7 +89,7 @@ interface TreeRow { sample_name?: string; puck_name?: string; dewar_name?: string; - images?: ImageInfo[]; + images?: ImageInfo[]; // Images associated explicitly with this row (especially run items) run_number?: number; beamline_parameters?: ExperimentParameters['beamline_parameters']; experimentType?: string; @@ -176,7 +178,13 @@ const ResultGrid: React.FC<ResultGridProps> = ({ activePgroup }) => { }, []); useEffect(() => { - // Fetch sample details and construct rows + if (!OpenAPI.BASE) { + console.error('OpenAPI.BASE is not set. Falling back to a default value.'); + return; + } + + setBasePath(`${OpenAPI.BASE}/`); + SamplesService.getSampleResultsSamplesResultsGet(activePgroup) .then((response: SampleResult[]) => { const treeRows: TreeRow[] = []; @@ -190,28 +198,27 @@ const ResultGrid: React.FC<ResultGridProps> = ({ activePgroup }) => { sample_name: sample.sample_name, puck_name: sample.puck_name, dewar_name: sample.dewar_name, - images: sample.images, + images: sample.images.filter(img => img.event_type === "Centering"), }; treeRows.push(sampleRow); - if (sample.experiment_runs) { - sample.experiment_runs.forEach((run) => { - const experimentType = getExperimentType(run); - const numImages = getNumberOfImages(run); - const runRow: TreeRow = { - id: `run-${sample.sample_id}-${run.run_number}`, - hierarchy: [sample.sample_id, run.run_number], - type: 'run', - sample_id: sample.sample_id, - run_number: run.run_number, - beamline_parameters: run.beamline_parameters, - experimentType, - numberOfImages: numImages, - images: sample.images, - }; - treeRows.push(runRow); - }); - } + sample.experiment_runs?.forEach(run => { + const experimentType = getExperimentType(run); + const numImages = getNumberOfImages(run); + const runRow: TreeRow = { + id: `run-${sample.sample_id}-${run.run_number}`, + hierarchy: [sample.sample_id, run.run_number], + type: 'run', + sample_id: sample.sample_id, + run_number: run.run_number, + beamline_parameters: run.beamline_parameters, + experimentType, + numberOfImages: numImages, + images: sample.images.filter(img => + img.event_type === "Collecting" ), + }; + treeRows.push(runRow); + }); }); setRows(treeRows); @@ -221,6 +228,7 @@ const ResultGrid: React.FC<ResultGridProps> = ({ activePgroup }) => { }); }, [activePgroup]); + // Define the grid columns const columns: GridColDef[] = [ { diff --git a/testfunctions.ipynb b/testfunctions.ipynb index 2b39278..093c6a5 100644 --- a/testfunctions.ipynb +++ b/testfunctions.ipynb @@ -3,8 +3,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-14T12:34:36.688448Z", - "start_time": "2025-03-14T12:34:36.274011Z" + "end_time": "2025-03-17T10:32:07.119518Z", + "start_time": "2025-03-17T10:32:06.622836Z" } }, "cell_type": "code", @@ -17,6 +17,8 @@ "from aareDBclient.rest import ApiException\n", "from pprint import pprint\n", "\n", + "from app.schemas import characterizationParameters, ResultCreate\n", + "\n", "#from app.data.data import sample\n", "\n", "#from aareDBclient import SamplesApi, ShipmentsApi, PucksApi\n", @@ -383,8 +385,21 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-07T20:50:06.182786Z", - "start_time": "2025-03-07T20:50:06.165153Z" + "end_time": "2025-03-17T10:32:10.718097Z", + "start_time": "2025-03-17T10:32:10.716192Z" + } + }, + "cell_type": "code", + "source": "sample_id = 247", + "id": "54d4d46ca558e7b9", + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-14T19:35:49.714724Z", + "start_time": "2025-03-14T19:35:49.691388Z" } }, "cell_type": "code", @@ -396,12 +411,13 @@ "with aareDBclient.ApiClient(configuration) as api_client:\n", " # Instance of the API client\n", " api_instance = aareDBclient.SamplesApi(api_client)\n", - " sample_id=258\n", + " #sample_id=293\n", " try:\n", " # Define the payload with only `event_type`\n", " sample_event_create = SampleEventCreate(\n", " sample_id=sample_id,\n", " event_type=\"Centering\" # Valid event type\n", + " #event_type=\"Collecting\" # Valid event type\n", " )\n", "\n", " # Debug the payload before sending\n", @@ -428,6 +444,16 @@ ], "id": "4a0665f92756b486", "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", + " warnings.warn(\n", + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/samples/247/events HTTP/1.1\" 200 405\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -435,31 +461,23 @@ "Payload being sent to API:\n", "{\"event_type\":\"Centering\"}\n", "API response:\n", - "('id', 258)\n", - "('sample_name', 'Sample258')\n", - "('position', 14)\n", - "('puck_id', 26)\n", + "('id', 247)\n", + "('sample_name', 'Sample247')\n", + "('position', 16)\n", + "('puck_id', 30)\n", "('crystalname', None)\n", "('proteinname', None)\n", "('positioninpuck', None)\n", "('priority', None)\n", "('comments', None)\n", "('data_collection_parameters', None)\n", - "('events', [SampleEventResponse(id=492, sample_id=258, event_type='Mounting', timestamp=datetime.datetime(2025, 3, 6, 13, 50)), SampleEventResponse(id=493, sample_id=258, event_type='Unmounting', timestamp=datetime.datetime(2025, 3, 6, 13, 50, 50)), SampleEventResponse(id=573, sample_id=258, event_type='Centering', timestamp=datetime.datetime(2025, 3, 7, 21, 50, 6))])\n", + "('events', [SampleEventResponse(event_type='Mounting', id=482, sample_id=247, timestamp=datetime.datetime(2025, 3, 13, 13, 39)), SampleEventResponse(event_type='Centering', id=483, sample_id=247, timestamp=datetime.datetime(2025, 3, 14, 20, 35, 49))])\n", "('mount_count', 0)\n", "('unmount_count', 0)\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n" - ] } ], - "execution_count": 46 + "execution_count": 5 }, { "metadata": {}, @@ -486,8 +504,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-14T12:37:36.649779Z", - "start_time": "2025-03-14T12:37:36.597340Z" + "end_time": "2025-03-14T19:55:02.036739Z", + "start_time": "2025-03-14T19:55:02.011806Z" } }, "cell_type": "code", @@ -506,11 +524,15 @@ "# \"backend/tests/sample_image/90_700.jpg\",\n", "#]\n", "\n", - "file_paths = [\"backend/tests/sample_image/mount.jpeg.jpg\"]\n", + "#file_paths = [\"backend/tests/sample_image/mount.jpeg.jpg\"]\n", + "\n", + "#file_paths = [\n", + "# \"backend/tests/sample_image/bb_raster_90.jpg\"\n", + "#]\n", + "\n", + "file_paths = [\"backend/tests/sample_image/after_dc.jpeg.jpg\"]\n", "\n", "\n", - "# Sample ID (ensure this exists on your backend)\n", - "sample_id = 299\n", "\n", "# Base URL for the upload endpoint\n", "url = f\"https://127.0.0.1:8000/samples/{sample_id}/upload-images\"\n", @@ -548,25 +570,27 @@ "id": "11f62976d2e7d9b1", "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Uploading mount.jpeg.jpg...\n", - "API Response for mount.jpeg.jpg:\n", - "404\n", - "{'detail': 'Sample not found'}\n" + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", + " warnings.warn(\n", + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/247/upload-images HTTP/1.1\" 200 205\n" ] }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n" + "Uploading after_dc.jpeg.jpg...\n", + "API Response for after_dc.jpeg.jpg:\n", + "200\n", + "{'pgroup': 'p20003', 'sample_id': 247, 'sample_event_id': 486, 'filepath': 'images/p20003/2025-03-14/Dewar Five/PKK007/16/Collecting_2025-03-14_20-54-48/after_dc.jpeg.jpg', 'status': 'active', 'comment': None, 'id': 8}\n" ] } ], - "execution_count": 2 + "execution_count": 12 }, { "metadata": {}, @@ -579,8 +603,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-11T15:05:58.348843Z", - "start_time": "2025-03-11T15:05:58.331240Z" + "end_time": "2025-03-14T19:54:48.102322Z", + "start_time": "2025-03-14T19:54:48.080070Z" } }, "cell_type": "code", @@ -598,15 +622,25 @@ "# Build the nested parameters\n", "rotation = RotationParameters(\n", " omegaStart_deg=0.0,\n", - " omegaStep=90.0,\n", + " omegaStep=0.1,\n", " phi=10.0,\n", " chi=0.0,\n", - " numberOfImages=4,\n", + " numberOfImages=3600,\n", " exposureTime_s=0.02\n", ")\n", "\n", + "#characterization = characterizationParameters(\n", + "# omegaStart_deg=0.0,\n", + "# omegaStep=90.0,\n", + "# oscillation_deg=1.0,\n", + "# phi=10.0,\n", + "# chi=0.0,\n", + "# numberOfImages=4,\n", + "# exposureTime_s=0.02\n", + "#)\n", + "\n", "#gridscan = GridScanParamers(\n", - "# xStart=0.0,\n", + "# xStart=90.0,\n", "# xStep=0.1,\n", "# yStart=0.0,\n", "# yStep= 0.1,\n", @@ -644,6 +678,7 @@ " beamlineFluxAtSample_ph_s=0,\n", " beamSizeWidth=30.0,\n", " beamSizeHeight=30.0,\n", + " #characterization=characterization\n", " rotation=rotation # Optional nested parameter\n", " #gridScan=gridscan\n", " # gridScan and jet are optional and can be added similarly\n", @@ -655,7 +690,7 @@ "experiment_params_payload = ExperimentParametersCreate(\n", " # run_number can be omitted/ignored if computed on the server\n", " beamline_parameters=beamline_params,\n", - " sample_id=299 # change sample_id to an existing sample in your database\n", + " sample_id=sample_id # change sample_id to an existing sample in your database\n", ")\n", "\n", "# Now, use the API instance to send the POST request\n", @@ -677,30 +712,119 @@ ], "id": "421ba0710f29a5fa", "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", + " warnings.warn(\n", + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/samples/247/experiment_parameters HTTP/1.1\" 200 860\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ "API Response:\n", - "run_number=1 beamline_parameters=BeamlineParameters(synchrotron='Swiss Light Source', beamline='PXIII', detector=Detector(manufacturer='DECTRIS', model='PILATUS4 2M', type='photon-counting', serial_number='16684dscsd668468', detector_distance_mm=95.0, beam_center_x_px=512.0, beam_center_y_px=512.0, pixel_size_x_um=150.0, pixel_size_y_um=150.0), wavelength=1.0, ring_current_a=0.0, ring_mode='Machine Down', undulator=None, undulatorgap_mm=None, monochromator='Si111', transmission=1.0, focusing_optic='Kirkpatrick-Baez', beamline_flux_at_sample_ph_s=0.0, beam_size_width=30.0, beam_size_height=30.0, rotation=RotationParameters(omega_start_deg=0.0, omega_step=90.0, chi=0.0, phi=10.0, number_of_images=4, exposure_time_s=0.02), grid_scan=None, jet=None, cryojet_temperature_k=None, humidifier_temperature_k=None, humidifier_humidity=None) sample_id=299 id=1\n" + "run_number=3 beamline_parameters=BeamlineParameters(synchrotron='Swiss Light Source', beamline='PXIII', detector=Detector(manufacturer='DECTRIS', model='PILATUS4 2M', type='photon-counting', serial_number='16684dscsd668468', detector_distance_mm=95.0, beam_center_x_px=512.0, beam_center_y_px=512.0, pixel_size_x_um=150.0, pixel_size_y_um=150.0), wavelength=1.0, ring_current_a=0.0, ring_mode='Machine Down', undulator=None, undulatorgap_mm=None, monochromator='Si111', transmission=1.0, focusing_optic='Kirkpatrick-Baez', beamline_flux_at_sample_ph_s=0.0, beam_size_width=30.0, beam_size_height=30.0, characterization=None, rotation=RotationParameters(omega_start_deg=0.0, omega_step=0.1, chi=0.0, phi=10.0, number_of_images=3600, exposure_time_s=0.02), grid_scan=None, jet=None, cryojet_temperature_k=None, humidifier_temperature_k=None, humidifier_humidity=None) sample_id=247 id=3\n" ] - }, + } + ], + "execution_count": 11 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-17T10:46:08.211213Z", + "start_time": "2025-03-17T10:46:08.193139Z" + } + }, + "cell_type": "code", + "source": [ + "# %%\n", + "from app.schemas import ResultCreate, Results\n", + "from pprint import pprint\n", + "import random\n", + "import aareDBclient\n", + "from aareDBclient.rest import ApiException\n", + "\n", + "# Your actual sample and experiment IDs\n", + "sample_id = 123 # Replace with valid IDs\n", + "run_id = 1 # Replace with valid run_id\n", + "\n", + "# Create random Results payload\n", + "results_data = Results(\n", + " pipeline=\"autoproc\",\n", + " resolution=round(random.uniform(1.0, 4.0), 2),\n", + " unit_cell=f\"{random.uniform(20, 120):.2f}, {random.uniform(20, 120):.2f}, \"\n", + " f\"{random.uniform(20, 120):.2f}, {random.uniform(60, 120):.2f}, \"\n", + " f\"{random.uniform(60, 120):.2f}, {random.uniform(60, 120):.2f}\",\n", + " spacegroup=random.choice(['P212121', 'C2', 'P1', 'P21', 'P21212', 'P41212']),\n", + " rmerge=round(random.uniform(0.02, 0.10), 3),\n", + " rmeas=round(random.uniform(0.02, 0.15), 3),\n", + " isig=round(random.uniform(1.0, 30.0), 2),\n", + " cc=round(random.uniform(0.7, 1.0), 3),\n", + " cchalf=round(random.uniform(0.7, 1.0), 3),\n", + " completeness=round(random.uniform(85.0, 100.0), 2),\n", + " multiplicity=round(random.uniform(1.0, 10.0), 2),\n", + " nobs=random.randint(10000, 500000),\n", + " total_refl=random.randint(5000, 250000),\n", + " unique_refl=random.randint(5000, 100000),\n", + " comments=\"Random auto-generated test entry\"\n", + ")\n", + "\n", + "payload = ResultCreate(sample_id=sample_id, run_id=run_id, result=results_data)\n", + "\n", + "# correct serialization, passing exact required dict structure\n", + "payload_dict = {\n", + " \"sample_id\": sample_id,\n", + " \"run_id\": run_id,\n", + " \"result\": results_data.model_dump(),\n", + "}\n", + "\n", + "with aareDBclient.ApiClient(configuration) as api_client:\n", + " api_instance = aareDBclient.SamplesApi(api_client)\n", + "\n", + " try:\n", + " api_response = api_instance.create_result_samples_processing_results_post(\n", + " result_create=payload_dict\n", + " )\n", + "\n", + " print(\"API call successful:\")\n", + " pprint(api_response)\n", + "\n", + " except ApiException as e:\n", + " print(f\"API call failed: {e}\")\n" + ], + "id": "3e3974d5df795c32", + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n" + " warnings.warn(\n", + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/processing-results HTTP/1.1\" 200 369\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API call successful:\n", + "ResultResponse(id=2, sample_id=123, run_id=1, result=Results(pipeline='autoproc', resolution=1.94, unit_cell='23.86, 89.07, 37.39, 63.99, 88.77, 81.42', spacegroup='P41212', rmerge=0.072, rmeas=0.07, isig=29.58, cc=0.758, cchalf=0.915, completeness=93.12, multiplicity=6.1, nobs=279922, total_refl=83994, unique_refl=47041, comments='Random auto-generated test entry'))\n" ] } ], - "execution_count": 49 + "execution_count": 9 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-03-04T09:22:51.456656Z", - "start_time": "2025-03-04T09:22:51.403762Z" + "end_time": "2025-03-14T16:09:47.444375Z", + "start_time": "2025-03-14T16:09:47.402508Z" } }, "cell_type": "code", @@ -714,15 +838,15 @@ " # GET request: Fetch all pucks in the tell\n", " try:\n", " # Call the API method to fetch pucks\n", - " all_results_response = api_instance.get_sample_results_samples_results_get(active_pgroup=\"p20001\")\n", - "\n", - " # Debug response structure by printing it in JSON format\n", - " formatted_response = json.dumps(\n", - " [p.to_dict() for p in all_results_response], # Assuming the API response can be converted to dicts\n", - " indent=4 # Use indentation for readability\n", - " )\n", - " print(\"The response of PucksApi->get_all_pucks_in_tell (formatted):\\n\")\n", - " print(formatted_response)\n", + " all_results_response = api_instance.get_sample_results_samples_results_get(active_pgroup=\"p20003\")\n", + " pprint(all_results_response)\n", + " ## Debug response structure by printing it in JSON format\n", + " #formatted_response = json.dumps(\n", + " # [p.to_dict() for p in all_results_response], # Assuming the API response can be converted to dicts\n", + " # indent=4 # Use indentation for readability\n", + " #)\n", + " #print(\"The response of PucksApi->get_all_pucks_in_tell (formatted):\\n\")\n", + " #print(formatted_response)\n", "\n", " ## Iterate through each puck and print information\n", " #for p in all_results_response:\n", @@ -741,788 +865,52 @@ "id": "6079a4f10102e906", "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "The response of PucksApi->get_all_pucks_in_tell (formatted):\n", - "\n", - "[\n", - " {\n", - " \"sample_id\": 1,\n", - " \"sample_name\": \"Sample001\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 2,\n", - " \"sample_name\": \"Sample002\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 3,\n", - " \"sample_name\": \"Sample003\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 4,\n", - " \"sample_name\": \"Sample004\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 5,\n", - " \"sample_name\": \"Sample005\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 6,\n", - " \"sample_name\": \"Sample006\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 7,\n", - " \"sample_name\": \"Sample007\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 8,\n", - " \"sample_name\": \"Sample008\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 9,\n", - " \"sample_name\": \"Sample009\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 10,\n", - " \"sample_name\": \"Sample010\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 11,\n", - " \"sample_name\": \"Sample011\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 12,\n", - " \"sample_name\": \"Sample012\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 13,\n", - " \"sample_name\": \"Sample013\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 14,\n", - " \"sample_name\": \"Sample014\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 15,\n", - " \"sample_name\": \"Sample015\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": [\n", - " {\n", - " \"run_number\": 1,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"rotation\": {\n", - " \"omegaStart_deg\": 0.0,\n", - " \"omegaStep\": 0.5,\n", - " \"chi\": 0.0,\n", - " \"phi\": 10.0,\n", - " \"numberOfImages\": 3600,\n", - " \"exposureTime_s\": 0.02\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"gridScan\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 15,\n", - " \"id\": 8\n", - " },\n", - " {\n", - " \"run_number\": 2,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"rotation\": {\n", - " \"omegaStart_deg\": 0.0,\n", - " \"omegaStep\": 90.0,\n", - " \"chi\": 0.0,\n", - " \"phi\": 10.0,\n", - " \"numberOfImages\": 4,\n", - " \"exposureTime_s\": 0.02\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"gridScan\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 15,\n", - " \"id\": 9\n", - " },\n", - " {\n", - " \"run_number\": 3,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"gridScan\": {\n", - " \"xStart\": 0.0,\n", - " \"xStep\": 0.1,\n", - " \"yStart\": 0.0,\n", - " \"yStep\": 0.1,\n", - " \"zStart\": 0.0,\n", - " \"zStep\": 0.0,\n", - " \"numberOfImages\": 4600,\n", - " \"exposureTime_s\": 0.001\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"rotation\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 15,\n", - " \"id\": 10\n", - " }\n", - " ]\n", - " },\n", - " {\n", - " \"sample_id\": 16,\n", - " \"sample_name\": \"Sample016\",\n", - " \"puck_name\": \"PUCK-001\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [\n", - " {\n", - " \"id\": 3,\n", - " \"filepath\": \"images/p20001/2025-02-26/Dewar One/PUCK-001/16/bb_raster_0.jpg\",\n", - " \"comment\": null\n", - " },\n", - " {\n", - " \"id\": 4,\n", - " \"filepath\": \"images/p20001/2025-02-26/Dewar One/PUCK-001/16/bb_raster_90.jpg\",\n", - " \"comment\": null\n", - " }\n", - " ],\n", - " \"experiment_runs\": [\n", - " {\n", - " \"run_number\": 1,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"rotation\": {\n", - " \"omegaStart_deg\": 0.0,\n", - " \"omegaStep\": 0.5,\n", - " \"chi\": 0.0,\n", - " \"phi\": 10.0,\n", - " \"numberOfImages\": 3600,\n", - " \"exposureTime_s\": 0.02\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"gridScan\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 16,\n", - " \"id\": 5\n", - " },\n", - " {\n", - " \"run_number\": 2,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"rotation\": {\n", - " \"omegaStart_deg\": 0.0,\n", - " \"omegaStep\": 0.5,\n", - " \"chi\": 0.0,\n", - " \"phi\": 10.0,\n", - " \"numberOfImages\": 3600,\n", - " \"exposureTime_s\": 0.02\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"gridScan\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 16,\n", - " \"id\": 6\n", - " },\n", - " {\n", - " \"run_number\": 3,\n", - " \"beamline_parameters\": {\n", - " \"synchrotron\": \"Swiss Light Source\",\n", - " \"beamline\": \"PXIII\",\n", - " \"detector\": {\n", - " \"manufacturer\": \"DECTRIS\",\n", - " \"model\": \"PILATUS4 2M\",\n", - " \"type\": \"photon-counting\",\n", - " \"serialNumber\": \"16684dscsd668468\",\n", - " \"detectorDistance_mm\": 95.0,\n", - " \"beamCenterX_px\": 512.0,\n", - " \"beamCenterY_px\": 512.0,\n", - " \"pixelSizeX_um\": 150.0,\n", - " \"pixelSizeY_um\": 150.0\n", - " },\n", - " \"wavelength\": 1.0,\n", - " \"ringCurrent_A\": 0.0,\n", - " \"ringMode\": \"Machine Down\",\n", - " \"monochromator\": \"Si111\",\n", - " \"transmission\": 1.0,\n", - " \"focusingOptic\": \"Kirkpatrick-Baez\",\n", - " \"beamlineFluxAtSample_ph_s\": 0.0,\n", - " \"beamSizeWidth\": 30.0,\n", - " \"beamSizeHeight\": 30.0,\n", - " \"rotation\": {\n", - " \"omegaStart_deg\": 0.0,\n", - " \"omegaStep\": 0.5,\n", - " \"chi\": 0.0,\n", - " \"phi\": 10.0,\n", - " \"numberOfImages\": 3600,\n", - " \"exposureTime_s\": 0.02\n", - " },\n", - " \"undulator\": null,\n", - " \"undulatorgap_mm\": null,\n", - " \"gridScan\": null,\n", - " \"jet\": null,\n", - " \"cryojetTemperature_K\": null,\n", - " \"humidifierTemperature_K\": null,\n", - " \"humidifierHumidity\": null\n", - " },\n", - " \"sample_id\": 16,\n", - " \"id\": 7\n", - " }\n", - " ]\n", - " },\n", - " {\n", - " \"sample_id\": 17,\n", - " \"sample_name\": \"Sample017\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 18,\n", - " \"sample_name\": \"Sample018\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 19,\n", - " \"sample_name\": \"Sample019\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 20,\n", - " \"sample_name\": \"Sample020\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 21,\n", - " \"sample_name\": \"Sample021\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 22,\n", - " \"sample_name\": \"Sample022\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 23,\n", - " \"sample_name\": \"Sample023\",\n", - " \"puck_name\": \"PUCK002\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 24,\n", - " \"sample_name\": \"Sample024\",\n", - " \"puck_name\": \"PUCK003\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 25,\n", - " \"sample_name\": \"Sample025\",\n", - " \"puck_name\": \"PUCK003\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 26,\n", - " \"sample_name\": \"Sample026\",\n", - " \"puck_name\": \"PUCK003\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 27,\n", - " \"sample_name\": \"Sample027\",\n", - " \"puck_name\": \"PUCK003\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 28,\n", - " \"sample_name\": \"Sample028\",\n", - " \"puck_name\": \"PUCK003\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 29,\n", - " \"sample_name\": \"Sample029\",\n", - " \"puck_name\": \"PUCK004\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 30,\n", - " \"sample_name\": \"Sample030\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 31,\n", - " \"sample_name\": \"Sample031\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 32,\n", - " \"sample_name\": \"Sample032\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 33,\n", - " \"sample_name\": \"Sample033\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 34,\n", - " \"sample_name\": \"Sample034\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 35,\n", - " \"sample_name\": \"Sample035\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 36,\n", - " \"sample_name\": \"Sample036\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 37,\n", - " \"sample_name\": \"Sample037\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 38,\n", - " \"sample_name\": \"Sample038\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 39,\n", - " \"sample_name\": \"Sample039\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 40,\n", - " \"sample_name\": \"Sample040\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 41,\n", - " \"sample_name\": \"Sample041\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 42,\n", - " \"sample_name\": \"Sample042\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 43,\n", - " \"sample_name\": \"Sample043\",\n", - " \"puck_name\": \"PUCK005\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 44,\n", - " \"sample_name\": \"Sample044\",\n", - " \"puck_name\": \"PUCK006\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 45,\n", - " \"sample_name\": \"Sample045\",\n", - " \"puck_name\": \"PUCK006\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 46,\n", - " \"sample_name\": \"Sample046\",\n", - " \"puck_name\": \"PUCK006\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 47,\n", - " \"sample_name\": \"Sample047\",\n", - " \"puck_name\": \"PUCK006\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 48,\n", - " \"sample_name\": \"Sample048\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 49,\n", - " \"sample_name\": \"Sample049\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 50,\n", - " \"sample_name\": \"Sample050\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 51,\n", - " \"sample_name\": \"Sample051\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 52,\n", - " \"sample_name\": \"Sample052\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 53,\n", - " \"sample_name\": \"Sample053\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 54,\n", - " \"sample_name\": \"Sample054\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 55,\n", - " \"sample_name\": \"Sample055\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 56,\n", - " \"sample_name\": \"Sample056\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 57,\n", - " \"sample_name\": \"Sample057\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 58,\n", - " \"sample_name\": \"Sample058\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 59,\n", - " \"sample_name\": \"Sample059\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 60,\n", - " \"sample_name\": \"Sample060\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " },\n", - " {\n", - " \"sample_id\": 61,\n", - " \"sample_name\": \"Sample061\",\n", - " \"puck_name\": \"PUCK007\",\n", - " \"dewar_name\": \"Dewar One\",\n", - " \"images\": [],\n", - " \"experiment_runs\": []\n", - " }\n", - "]\n" + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", + " warnings.warn(\n", + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"GET /samples/results?active_pgroup=p20003 HTTP/1.1\" 200 4243\n" ] }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n" + "[SampleResult(sample_id=215, sample_name='Sample215', puck_name='PKK004', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=216, sample_name='Sample216', puck_name='PKK004', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=217, sample_name='Sample217', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=218, sample_name='Sample218', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=219, sample_name='Sample219', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=220, sample_name='Sample220', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=221, sample_name='Sample221', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=222, sample_name='Sample222', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=223, sample_name='Sample223', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=224, sample_name='Sample224', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=225, sample_name='Sample225', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=226, sample_name='Sample226', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=227, sample_name='Sample227', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=228, sample_name='Sample228', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=229, sample_name='Sample229', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=230, sample_name='Sample230', puck_name='PKK005', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=231, sample_name='Sample231', puck_name='PKK006', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=232, sample_name='Sample232', puck_name='PKK006', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=233, sample_name='Sample233', puck_name='PKK006', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=234, sample_name='Sample234', puck_name='PKK006', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=235, sample_name='Sample235', puck_name='PKK006', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=236, sample_name='Sample236', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=237, sample_name='Sample237', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=238, sample_name='Sample238', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=239, sample_name='Sample239', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=240, sample_name='Sample240', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=241, sample_name='Sample241', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=242, sample_name='Sample242', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=243, sample_name='Sample243', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=244, sample_name='Sample244', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=245, sample_name='Sample245', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=246, sample_name='Sample246', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", + " SampleResult(sample_id=247, sample_name='Sample247', puck_name='PKK007', dewar_name='Dewar Five', images=[ImageInfo(id=1, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Mounting_2025-03-13_13-39-00/mount.jpeg.jpg', comment=None, event_type='Mounting')], experiment_runs=[])]\n" ] } ], -- GitLab