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]
  • publication:
    class models.publication.Publication(*, Id: str | None = None, created_at: ~datetime.datetime = <factory>, is_deleted: bool = False, title: str, url: str, abstract: str, notes: str, keywords: list[str] = <factory>)[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:
    • datamodel (str) – datamodel type from : [sample,environment,reflectivity,eis,publication].

    • data (dict (POST body)) – dict with all the fields and the values for an object

    Returns:

    the object with its fields

    Return type:

    Sample | Environment | Reflectivity | EIS | Publication

    e.g. http://0.0.0.0:3000/api/sample/create

    Input 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:
    • datamodel (str) – datamodel type from : [sample,environment,reflectivity,eis,publication].

    • obj_id (str) – object GUID Id

    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-1cb1475daec7

    Output

    {
       "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:
    • datamodel (str) – datamodel type from : [sample,environment,reflectivity,eis,publication].

    • data (dict) – dict that contains the fields and the values that need to be updated to, replacing the exisiting values to the news ones

    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-50b542c2c03e

    Input 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.

    Parameters:
    • datamodel (str) – datamodel type from : [sample,environment,reflectivity,eis,publication].

    • obj_id (str) – object GUID Id

    Returns:

    the status completion and the deleted object id {“status”:”success”,”deleted_id”:obj_id}

    Return type:

    dict

    e.g. http://0.0.0.0:3000/api/environment/delete/96a6cdf0-45a9-4a3f-8421-1d25b29b680e

    Output

    {
       "status": "success",
       "deleted_id": "96a6cdf0-45a9-4a3f-8421-1d25b29b680e"
    }