Skip to content

gateways

/gateways/*

This file describes the router for:

/gateways/{id}

where, id may be left out.

get_gateway(request, gateway_id) async

GET /gateways/{gateway ID}

Represent an OPTIMADE server.

Note

For now, redirect to the gateway's /structures entry listing endpoint.

Source code in optimade_gateway/routers/gateways.py
@ROUTER.get(
    "/gateways/{gateway_id}",
    response_model=Union[GatewaysResponseSingle, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways"],
)
async def get_gateway(request: Request, gateway_id: str) -> GatewaysResponseSingle:
    """`GET /gateways/{gateway ID}`

    Represent an OPTIMADE server.

    !!! note
        For now, redirect to the gateway's `/structures` entry listing endpoint.

    """
    from optimade_gateway.routers.utils import validate_resource

    await validate_resource(GATEWAYS_COLLECTION, gateway_id)
    return RedirectResponse(
        request.url.replace(path=f"{request.url.path.rstrip('/')}/structures")
    )

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

GET /gateways

Return overview of all (active) gateways.

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

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

    return await get_entries(
        collection=GATEWAYS_COLLECTION,
        response_cls=GatewaysResponse,
        request=request,
        params=params,
    )

post_gateways(request, gateway) async

POST /gateways

Create or return existing gateway according to gateway.

Source code in optimade_gateway/routers/gateways.py
@ROUTER.post(
    "/gateways",
    response_model=Union[GatewaysResponseSingle, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways"],
)
async def post_gateways(
    request: Request, gateway: GatewayCreate
) -> GatewaysResponseSingle:
    """`POST /gateways`

    Create or return existing gateway according to `gateway`.
    """
    from optimade_gateway.common.utils import clean_python_types
    from optimade_gateway.routers.utils import resource_factory

    if gateway.database_ids:
        from optimade_gateway.routers.databases import DATABASES_COLLECTION

        databases = await DATABASES_COLLECTION.get_multiple(
            filter={"id": {"$in": await clean_python_types(gateway.database_ids)}}
        )

        if not isinstance(gateway.databases, list):
            gateway.databases = []

        current_database_ids = [_.id for _ in gateway.databases]
        gateway.databases.extend(
            (_ for _ in databases if _.id not in current_database_ids)
        )

    result, created = await resource_factory(gateway)

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