Skip to content

databases

/databases/*

This file describes the router for:

/databases/{id}

where, id may be left out.

Database resources represent the available databases that may be used for the gateways.

One can register a new database (by using POST /databases) or look through the available databases (by using GET /databases) using standard OPTIMADE filtering.

get_database(request, database_id, params=Depends(NoneType)) async

GET /databases/{database ID}

Return a single LinksResource representing the database resource object with id={database ID}.

Source code in optimade_gateway/routers/databases.py
@ROUTER.get(
    "/databases/{database_id:path}",
    response_model=Union[DatabasesResponseSingle, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Databases"],
)
async def get_database(
    request: Request,
    database_id: str,
    params: SingleEntryQueryParams = Depends(),
) -> DatabasesResponseSingle:
    """`GET /databases/{database ID}`

    Return a single
    [`LinksResource`](https://www.optimade.org/optimade-python-tools/api_reference/models/links/#optimade.models.links.LinksResource)
    representing the database resource object with `id={database ID}`.
    """
    params.filter = f'id="{database_id}"'
    result, _, fields = await DATABASES_COLLECTION.find(params=params)

    if fields and result is not None:
        result = handle_response_fields(result, fields)[0]

    return DatabasesResponseSingle(
        links=ToplevelLinks(next=None),
        data=result,
        meta=meta_values(
            url=request.url,
            data_returned=0 if result is None else 1,
            data_available=await DATABASES_COLLECTION.count(),
            more_data_available=False,
        ),
    )

get_databases(request, params=Depends(NoneType)) async

GET /databases

Return overview of all (active) databases.

Source code in optimade_gateway/routers/databases.py
@ROUTER.get(
    "/databases",
    response_model=Union[DatabasesResponse, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Databases"],
)
async def get_databases(
    request: Request,
    params: EntryListingQueryParams = Depends(),
) -> DatabasesResponse:
    """`GET /databases`

    Return overview of all (active) databases.
    """
    from optimade_gateway.routers.utils import get_entries

    return await get_entries(
        collection=DATABASES_COLLECTION,
        response_cls=DatabasesResponse,
        request=request,
        params=params,
    )

post_databases(request, database) async

POST /databases

Create/Register or return an existing LinksResource, representing a database resource object, according to database.

Source code in optimade_gateway/routers/databases.py
@ROUTER.post(
    "/databases",
    response_model=Union[DatabasesResponseSingle, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Databases"],
)
async def post_databases(
    request: Request, database: DatabaseCreate
) -> DatabasesResponseSingle:
    """`POST /databases`

    Create/Register or return an existing
    [`LinksResource`](https://www.optimade.org/optimade-python-tools/api_reference/models/links/#optimade.models.links.LinksResource),
    representing a database resource object, according to `database`.
    """
    from optimade_gateway.routers.utils import resource_factory

    result, created = await resource_factory(database)

    return DatabasesResponseSingle(
        links=ToplevelLinks(next=None),
        data=result,
        meta=meta_values(
            url=request.url,
            data_returned=1,
            data_available=await DATABASES_COLLECTION.count(),
            more_data_available=False,
            **{f"_{CONFIG.provider.prefix}_created": created},
        ),
    )
Back to top