|
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 |
|
33 | 34 |
|
34 | 35 | logger = logging.getLogger() |
35 | 36 |
|
| 37 | + |
36 | 38 | def query_zone_data( |
| 39 | + request: Request, |
37 | 40 | zoneId: str | int, |
38 | 41 | base_level: int, |
39 | 42 | relative_levels: List[int], |
@@ -268,13 +271,19 @@ def query_zone_data( |
268 | 271 | return FileResponse(tmpfile[1], headers={'content-type': 'application/zarr+zip'}) |
269 | 272 | if (returntype == 'application/geo+json'): |
270 | 273 | return ZonesDataGeoJson(type='FeatureCollection', features=features) |
271 | | - link = [k.href for k in dggrs_desc.links if (k.rel == '[ogc-rel:dggrs-definition]')][0] |
| 274 | + col_schema_id = None |
| 275 | + if len(collection) == 1: # no schema applicable if the response is a multi-collection aggregation |
| 276 | + col_id = list(collection.keys())[0] |
| 277 | + col_data_url = request.url.replace(query=None, fragment=None) |
| 278 | + col_desc_url = str(col_data_url).rsplit(f'/{col_id}/', 1)[0] |
| 279 | + col_schema_id = f"{col_desc_url}/{col_id}/schema" |
| 280 | + dggrs_link = [k.href for k in dggrs_desc.links if (k.rel == '[ogc-rel:dggrs-definition]')][0] |
272 | 281 | relative_levels = [rl - base_level for rl in relative_levels] |
273 | 282 | return_ = cast(ZonesDataDggsJsonResponse | Dict[str, Any], { |
274 | | - 'dggrs': link, |
| 283 | + 'dggrs': dggrs_link, |
275 | 284 | 'zoneId': str(zoneId), |
276 | 285 | 'depths': relative_levels, |
277 | | - 'schema': Schema(properties=properties), |
| 286 | + 'schema': Schema(properties=properties, id_=col_schema_id), |
278 | 287 | 'values': values, |
279 | 288 | }) |
280 | 289 | if zone_level_dims: |
|
0 commit comments