DataModel APIs
Routes and Controllers
APIs correspond to the following data collections ({datamodel}) with field names and types as described in the corresponding class:
- sample:
- class models.sample.Sample(*, Id: str | None = None, created_at: ~datetime.datetime = <factory>, is_deleted: bool = False, description: str, environment_ids: ~typing.Annotated[list[str], ~annotated_types.MinLen(min_length=1)], substrate: ~models.sample.Layer, main_composition: str, geometry: str | None = None, layers: ~typing.Annotated[list[~models.sample.Layer], ~annotated_types.MinLen(min_length=1), ~annotated_types.MaxLen(max_length=5)], publication_ids: list[str] = <factory>)[source]
- environment:
- class models.environment.Environment(*, Id: str | None = None, created_at: ~datetime.datetime = <factory>, is_deleted: bool = False, description: str, ambient_medium: ~models.material.Material | None, temperature: float | None = None, pressure: float | None = None, potential: float | None = None, relative_humidity: float | None = None, measurements_ids: list[str] | None = <factory>, timestamp: ~datetime.datetime = <factory>)[source]
- reflectivity:
- class models.measurement.Reflectivity(*, Id: str | None = None, created_at: ~datetime.datetime = <factory>, is_deleted: bool = False, proposal_number: str, facility: ~typing.Literal['SNS', 'HFIR', 'LCLS'], instrument: ~typing.Literal['REF_L'], laboratory: ~typing.Literal['ORNL', 'SLAC'], probe: ~typing.Literal['neutrons', 'xray', 'other'], technique: ~typing.Literal['Reflectivity'], technique_description: str, is_simulated: bool = False, run_title: str, run_number: str | None, run_start: ~datetime.datetime = <factory>, raw_file_path: str, q_1_angstrom: list[float] = <factory>, r: list[float] = <factory>, d_r: list[float] = <factory>, d_q: list[float] = <factory>, measurement_geometry: str, reduction_time: ~datetime.datetime = <factory>, reduction_version: str)[source]
- eis:
- class models.measurement.EIS(*, Id: str | None = None, created_at: ~datetime.datetime = <factory>, is_deleted: bool = False, proposal_number: str, facility: ~typing.Literal['SNS', 'HFIR', 'LCLS'], instrument: ~typing.Literal['REF_L'], laboratory: ~typing.Literal['ORNL', 'SLAC'], probe: ~typing.Literal['neutrons', 'xray', 'other'], technique: ~typing.Literal['Reflectivity'], technique_description: str, is_simulated: bool = False, run_title: str, run_number: str | None, run_start: ~datetime.datetime = <factory>, raw_file_path: str, frequency: float, duration: float, real_z: float, imaginery_z: float, phase: float, potential: str)[source]
The following APIs cover basic operations for creating, updating, returning and deleting a document:
- POST /{datamodel}/create
- async controllers.datamodel_controller.create_dataobject(request: Request, datamodel: str, data: dict = Body(PydanticUndefined)) dict[source]
It creates a new dataobject.
- Parameters:
- Returns:
the object with its fields
- Return type:
Sample | Environment | Reflectivity | EIS | Publication
e.g.
http://0.0.0.0:3000/api/sample/createInput POST (BODY)
{ "description":"this is a test", "environment_ids":["88720291-5d4a-4f77-8319-03df6fe88fab"], "main_composition":"asffdaf", "substrate": { "material":{ "composition": "composition1", "mass": 1.9, "density":2.21 }, "thickness":1.2 }, "layers":[ { "material":{ "mass": 1.9, "density":2.21, "composition":"fsdf" }, "thickness":1.2 } ] }Output
{ "Id": "3c901c85-3235-41be-8984-2738253365ae", "description": "this is a test", "environment_ids": [ "88720291-5d4a-4f77-8319-03df6fe88fab" ], "substrate": { "material": { "composition": "composition1", "mass": 1.9, "density": 2.21 }, "thickness": 1.2 }, "main_composition": "asffdaf", "geometry": null, "layers": [ { "material": { "composition": "fsdf", "mass": 1.9, "density": 2.21 }, "thickness": 1.2 } ], "publication_ids": [], "related_sample_ids": [] }
- GET /{datamodel}/get/{obj_id}
- async controllers.datamodel_controller.get_dataobject(request: Request, datamodel: str, obj_id: str) dict[source]
It finds and returns an active dataobject.
- Parameters:
- Returns:
the object with its fields
- Return type:
Sample | Environment | Reflectivity | EIS | Publication
e.g.
http://0.0.0.0:3000/api/eis/get/2bb8238e-f4b2-4729-9606-1cb1475daec7Output
{ "Id": "2bb8238e-f4b2-4729-9606-1cb1475daec7", "proposal_number": "111111", "facility": "HFIR", "lab": "ORNL", "probe": "neutrons", "technique": "Reflectivity", "technique_description": "another", "is_simulated": true, "run_title": "Run34343", "run_number": "6", "run_start": "2024-05-19T11:30:00", "raw_file_path": "/home/user/file2.nxs", "frequency": 2.35, "duration": 10.65, "real_z": 5.66, "imaginery_z": 8.91, "phase": 6.65, "potential": "there is potential" }
- POST /{datamodel}/update/{obj_id}
- async controllers.datamodel_controller.update_dataobject(request: Request, datamodel: str, obj_id: str, data: Dict[str, Any] = Body(PydanticUndefined)) dict[source]
It updates an active dataobject with Id obj_id.
- Parameters:
- Returns:
the object with its fields
- Return type:
Sample | Environment | Reflectivity | EIS | Publication
e.g.
http://0.0.0.0:3000/api/publication/update/6df8d543-b88f-44c3-9440-50b542c2c03eInput POST (BODY)
{ "data":{ "title": "Publication3", "url":"/home/usr/thsi/filee3.pdf", "abstract":" lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum\n lorem ipsum \n lorem ipsum 3.", "notes":"notes3 lorem ipsum lorem ipsum lorem ipsum lorem ", "keywords":["key3"] } }Output
{ "Id": "6df8d543-b88f-44c3-9440-50b542c2c03e", "title": "Publication3", "url": "/home/usr/thsi/filee3.pdf", "abstract":" lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum\n lorem ipsum \n lorem ipsum 3.", "notes":"notes3 lorem ipsum lorem ipsum lorem ipsum lorem ", "keywords": [ "key3" ] }
- DELETE /{datamodel}/delete/{obj_id}
- async controllers.datamodel_controller.delete_dataobject(request: Request, datamodel: str, obj_id: str) dict[source]
It deletes a dataobject.
e.g.
http://0.0.0.0:3000/api/environment/delete/96a6cdf0-45a9-4a3f-8421-1d25b29b680eOutput
{ "status": "success", "deleted_id": "96a6cdf0-45a9-4a3f-8421-1d25b29b680e" }