Skip to content

queries

Special /queries endpoint for a gateway to perform and list queries

This file describes the router for:

/gateways/{id}/{version}/queries/{id}

where version and the last id may be left out.

get_gateway_queries(request, gateway_id, params=Depends(NoneType)) async

GET /gateways/{gateway_id}/queries

Return overview of all (active) queries for specific gateway.

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

    Return overview of all (active) queries for specific gateway.
    """
    from optimade_gateway.routers.gateways import GATEWAYS_COLLECTION
    from optimade_gateway.routers.queries import get_queries

    await validate_resource(GATEWAYS_COLLECTION, gateway_id)

    params.filter = (
        f'( {params.filter} ) AND ( gateway="{gateway_id}" )'
        if params.filter
        else f'gateway="{gateway_id}"'
    )
    return await get_queries(request, params)

get_gateway_query(request, gateway_id, query_id) async

GET /gateways/{gateway_id}/queries/{query_id}

Return the response from a gateway query (QueryResource.attributes.response).

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

    Return the response from a gateway query
    ([`QueryResource.attributes.response`][optimade_gateway.models.queries.QueryResourceAttributes.response]).
    """
    from optimade_gateway.routers.gateways import GATEWAYS_COLLECTION
    from optimade_gateway.routers.queries import get_query

    await validate_resource(GATEWAYS_COLLECTION, gateway_id)

    return await get_query(request, query_id)

post_gateway_queries(request, gateway_id, query) async

POST /gateways/{gateway_id}/queries

Create or return existing gateway query according to query.

Source code in optimade_gateway/routers/gateway/queries.py
@ROUTER.post(
    "/gateways/{gateway_id}/queries",
    response_model=Union[QueriesResponseSingle, ErrorResponse],
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways", "Queries"],
    status_code=status.HTTP_202_ACCEPTED,
)
async def post_gateway_queries(
    request: Request,
    gateway_id: str,
    query: QueryCreate,
) -> QueriesResponseSingle:
    """`POST /gateways/{gateway_id}/queries`

    Create or return existing gateway query according to `query`.
    """
    from optimade_gateway.routers.gateways import GATEWAYS_COLLECTION
    from optimade_gateway.routers.queries import post_queries

    await validate_resource(GATEWAYS_COLLECTION, gateway_id)

    if query.gateway_id and query.gateway_id != gateway_id:
        raise BadRequest(
            status_code=403,
            title="Forbidden",
            detail=(
                f"The gateway ID in the posted data (<gateway={query.gateway_id}>) does not align "
                f"with the gateway ID specified in the URL (/{gateway_id}/)."
            ),
        )

    return await post_queries(request, query)
Back to top