Skip to content

Commit 638d29e

Browse files
authored
Merge pull request #7 from crim-ca/add-schema-id
2 parents 6cdd952 + fe06a97 commit 638d29e

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

pydggsapi/models/ogc_dggs/data_retrieval.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from pydggsapi.dependencies.collections_providers.abstract_collection_provider import AbstractCollectionProvider, DatetimeNotDefinedError
1515
from pydggsapi.dependencies.api.utils import getCQLAttributes
1616

17+
from starlette.requests import Request
1718
from fastapi.responses import FileResponse, Response
1819
from numcodecs import Blosc
1920
from typing import Any, List, Dict, Optional, Union, cast
@@ -34,7 +35,9 @@
3435

3536
logger = logging.getLogger()
3637

38+
3739
def query_zone_data(
40+
request: Request,
3841
zoneId: str | int,
3942
base_level: int,
4043
relative_levels: List[int],
@@ -273,13 +276,19 @@ def query_zone_data(
273276
return FileResponse(tmpfile[1], headers={'content-type': 'application/zarr+zip'})
274277
if (returntype == 'application/geo+json'):
275278
return ZonesDataGeoJson(type='FeatureCollection', features=features)
276-
link = [k.href for k in dggrs_desc.links if (k.rel == '[ogc-rel:dggrs-definition]')][0]
279+
col_schema_id = None
280+
if len(collection) == 1: # no schema applicable if the response is a multi-collection aggregation
281+
col_id = list(collection.keys())[0]
282+
col_data_url = request.url.replace(query=None, fragment=None)
283+
col_desc_url = str(col_data_url).rsplit(f'/{col_id}/', 1)[0]
284+
col_schema_id = f"{col_desc_url}/{col_id}/schema"
285+
dggrs_link = [k.href for k in dggrs_desc.links if (k.rel == '[ogc-rel:dggrs-definition]')][0]
277286
relative_levels = [rl - base_level for rl in relative_levels]
278287
return_ = cast(ZonesDataDggsJsonResponse | Dict[str, Any], {
279-
'dggrs': link,
288+
'dggrs': dggrs_link,
280289
'zoneId': str(zoneId),
281290
'depths': relative_levels,
282-
'schema': Schema(properties=properties),
291+
'schema': Schema(properties=properties, id_=col_schema_id),
283292
'values': values,
284293
})
285294
if zone_level_dims:

pydggsapi/routers/dggs_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ async def dggrs_zones_data(
547547
detail=f"f'{__name__} zone id {zoneId} with relative depth: {depth} is over refinement for all collections")
548548
filtered_collections = {k: v for k, v in collection.items() if (k not in skip_collection)}
549549
try:
550-
result = query_zone_data(zoneId, base_level, relative_levels, dggrs_description,
550+
result = query_zone_data(req, zoneId, base_level, relative_levels, dggrs_description,
551551
dggrs_provider, filtered_collections, collection_providers, returntype,
552552
returngeometry, filter, include_datetime, include_properties, exclude_properties)
553553
if (result is None):

0 commit comments

Comments
 (0)