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}

Return a single GatewayResource.

Source code in optimade_gateway/routers/gateways.py
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
@ROUTER.get(
    "/gateways/{gateway_id}",
    response_model=GatewaysResponseSingle,
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways"],
    responses=ERROR_RESPONSES,
)
async def get_gateway(request: Request, gateway_id: str) -> GatewaysResponseSingle:
    """`GET /gateways/{gateway ID}`

    Return a single
    [`GatewayResource`][optimade_gateway.models.gateways.GatewayResource].
    """
    collection = await collection_factory(CONFIG.gateways_collection)
    result = await get_valid_resource(collection, gateway_id)

    return GatewaysResponseSingle(
        links=ToplevelLinks(next=None),
        data=result,
        meta=meta_values(
            url=request.url,
            data_returned=1,
            data_available=await collection.acount(),
            more_data_available=False,
            schema=CONFIG.schema_url,
        ),
    )

get_gateways(request, params) async

GET /gateways

Return overview of all (active) gateways.

Source code in optimade_gateway/routers/gateways.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@ROUTER.get(
    "/gateways",
    response_model=GatewaysResponse,
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways"],
    responses=ERROR_RESPONSES,
)
async def get_gateways(
    request: Request,
    params: Annotated[EntryListingQueryParams, Depends()],
) -> GatewaysResponse:
    """`GET /gateways`

    Return overview of all (active) gateways.
    """
    return await get_entries(
        collection=await collection_factory(CONFIG.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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
@ROUTER.post(
    "/gateways",
    response_model=GatewaysResponseSingle,
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    response_model_exclude_unset=True,
    tags=["Gateways"],
    responses=ERROR_RESPONSES,
)
async def post_gateways(
    request: Request, gateway: GatewayCreate
) -> GatewaysResponseSingle:
    """`POST /gateways`

    Create or return existing gateway according to `gateway`.
    """
    if gateway.database_ids:
        databases_collection = await collection_factory(CONFIG.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)
    collection = await collection_factory(CONFIG.gateways_collection)

    return GatewaysResponseSingle(
        links=ToplevelLinks(next=None),
        data=result,
        meta=meta_values(
            url=request.url,
            data_returned=1,
            data_available=await collection.acount(),
            more_data_available=False,
            schema=CONFIG.schema_url,
            **{f"_{CONFIG.provider.prefix}_created": created},
        ),
    )