diff --git a/backend/app/models.py b/backend/app/models.py index 2a848fb02f9b75aa6dc30f88ae85c2bbe1e25ba5..c4d97933d7c5f5c24cc7b929bd9897f8c072b165 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 465719ba95b823d262a15da4be6b127f390d0b1d..4f89135860b736c1367a6ff406679be530d286ca 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 c00d2cb8e3b3c3f5b409bc7d3af16080331bad93..1566b42ae55ed59058c42d307a481006e799a3b9 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 272c5fad5ee068a0414875988eabb8c8399e459f..228bcecba29d5b59a13cfafd850e0c2132b4c6cb 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/frontend/fetch-openapi.js b/frontend/fetch-openapi.js index 2166ff8f1bd2a77a7f52848d7d55301f0962e64a..e718fe71351db3308f3baa3906deec96f9517a6e 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 09ad8da29906227181c000561883fdd470b3aff9..cfc6228a19050f00d2a3937cfe4c6eb7575f6fe3 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 2b392781ecb861bb3e9f769bc48a59aedcfa3e37..093c6a53baf1abf7226629db195fe4574e48a358 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" ] } ],