Skip to content

info

/gateways/{id}/info/*

This file describes the router for:

/gateways/{id}/{version}/info/{entry}

where version and entry may be left out.

get_gateways_entry_info(request, gateway_id, entry) async

GET /gateways/{gateway_id}/info/{entry}

Get information about the gateway {gateway_id}'s entry-listing endpoints.

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

    Get information about the gateway `{gateway_id}`'s entry-listing endpoints.
    """
    from optimade.models import EntryInfoResource
    from optimade.server.exceptions import BadRequest

    from optimade_gateway.routers.gateways import GATEWAYS_COLLECTION
    from optimade_gateway.routers.utils import (
        aretrieve_queryable_properties,
        validate_resource,
    )

    await validate_resource(GATEWAYS_COLLECTION, gateway_id)

    valid_entry_info_endpoints = ENTRY_INFO_SCHEMAS.keys()
    if entry not in valid_entry_info_endpoints:
        raise BadRequest(
            title="Not Found",
            status_code=404,
            detail=(
                f"Entry info not found for {entry}, valid entry info endpoints are: "
                f"{', '.join(valid_entry_info_endpoints)}"
            ),
        )

    schema = ENTRY_INFO_SCHEMAS[entry]()
    queryable_properties = {"id", "type", "attributes"}
    properties = await aretrieve_queryable_properties(schema, queryable_properties)

    output_fields_by_format = {"json": list(properties.keys())}

    return EntryInfoResponse(
        data=EntryInfoResource(
            formats=list(output_fields_by_format.keys()),
            description=schema.get("description", "Entry Resources"),
            properties=properties,
            output_fields_by_format=output_fields_by_format,
        ),
        meta=meta_values(
            url=request.url,
            data_returned=1,
            data_available=1,
            more_data_available=False,
        ),
    )

get_gateways_info(request, gateway_id) async

GET /gateways/{gateway_id}/info

Return a regular /info response for an OPTIMADE implementation, including extra information from all the gateway's databases. The general information will be a minimum set from the gateway's databases.

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

    Return a regular `/info` response for an OPTIMADE implementation,
    including extra information from all the gateway's databases.
    The general information will be a minimum set from the gateway's databases.
    """
    from optimade_gateway.common.config import CONFIG
    from optimade_gateway.routers.gateways import GATEWAYS_COLLECTION
    from optimade_gateway.routers.utils import get_valid_resource

    gateway = await get_valid_resource(GATEWAYS_COLLECTION, gateway_id)

    return InfoResponse(
        data=BaseInfoResource(
            id=BaseInfoResource.schema()["properties"]["id"]["const"],
            type=BaseInfoResource.schema()["properties"]["type"]["const"],
            attributes=BaseInfoAttributes(
                api_version=__api_version__,
                available_api_versions=[
                    {
                        "url": f"{get_base_url(request.url)}/v{__api_version__.split('.')[0]}/gateways/{gateway_id}/v{__api_version__.split('.')[0]}",
                        "version": __api_version__,
                    }
                ],
                formats=["json"],
                entry_types_by_format={"json": list(ENTRY_INFO_SCHEMAS.keys())},
                available_endpoints=sorted(
                    ["info", "links"] + list(ENTRY_INFO_SCHEMAS.keys())
                ),
                is_index=False,
            ),
        ),
        meta=meta_values(
            url=request.url,
            data_returned=1,
            data_available=1,
            more_data_available=False,
            **{
                f"_{CONFIG.provider.prefix}_gateway": {
                    "databases": [
                        {"id": _.id, "type": _.type}
                        for _ in gateway.attributes.databases
                    ],
                }
            },
        ),
    )

get_versioned_gateways_entry_info(request, gateway_id, version, entry) async

GET /gateways/{gateway_id}/{version}/info/{entry}

Same as GET /gateways/{gateway_id}/info/{entry}.

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

    Same as `GET /gateways/{gateway_id}/info/{entry}`.
    """
    from optimade_gateway.routers.gateway.utils import validate_version

    await validate_version(version)
    return await get_gateways_entry_info(request, gateway_id, entry)

get_versioned_gateways_info(request, gateway_id, version) async

GET /gateways/{gateway_id}/{version}/info

Same as GET /gateways/{gateway_id}/info.

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

    Same as `GET /gateways/{gateway_id}/info`.
    """
    from optimade_gateway.routers.gateway.utils import validate_version

    await validate_version(version)
    return await get_gateways_info(request, gateway_id)
Back to top