|
14 | 14 | from pydggsapi.dependencies.collections_providers.abstract_collection_provider import AbstractCollectionProvider, DatetimeNotDefinedError |
15 | 15 | from pydggsapi.dependencies.api.utils import getCQLAttributes |
16 | 16 |
|
| 17 | +from starlette.requests import Request |
17 | 18 | from fastapi.responses import FileResponse, Response |
18 | 19 | from numcodecs import Blosc |
19 | 20 | from typing import Any, List, Dict, Optional, Union, cast |
|
34 | 35 |
|
35 | 36 | logger = logging.getLogger() |
36 | 37 |
|
| 38 | + |
37 | 39 | def query_zone_data( |
| 40 | + request: Request, |
38 | 41 | zoneId: str | int, |
39 | 42 | base_level: int, |
40 | 43 | relative_levels: List[int], |
@@ -273,13 +276,19 @@ def query_zone_data( |
273 | 276 | return FileResponse(tmpfile[1], headers={'content-type': 'application/zarr+zip'}) |
274 | 277 | if (returntype == 'application/geo+json'): |
275 | 278 | 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] |
277 | 286 | relative_levels = [rl - base_level for rl in relative_levels] |
278 | 287 | return_ = cast(ZonesDataDggsJsonResponse | Dict[str, Any], { |
279 | | - 'dggrs': link, |
| 288 | + 'dggrs': dggrs_link, |
280 | 289 | 'zoneId': str(zoneId), |
281 | 290 | 'depths': relative_levels, |
282 | | - 'schema': Schema(properties=properties), |
| 291 | + 'schema': Schema(properties=properties, id_=col_schema_id), |
283 | 292 | 'values': values, |
284 | 293 | }) |
285 | 294 | if zone_level_dims: |
|
0 commit comments