Skip to content

Commit a517343

Browse files
authored
Create get_parameters in BaseEDRProvider (#2367)
* Migrate get_parameters to base_edr * Use get_parameters in xarray * Fix tests * Fix flake8 * Migrate as_list annotation
1 parent 726e48b commit a517343

4 files changed

Lines changed: 56 additions & 50 deletions

File tree

pygeoapi/api/collection.py

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -400,37 +400,7 @@ def gen_collection(api, request, dataset: str,
400400
# TODO: translate
401401
LOGGER.debug('Adding EDR links')
402402
data['data_queries'] = {}
403-
parameters = p.get_fields()
404-
if parameters:
405-
data['parameter_names'] = {}
406-
for key, value in parameters.items():
407-
p_label = value.get('title')
408-
p_description = value.get('description')
409-
data['parameter_names'][key] = {
410-
'id': key,
411-
'type': 'Parameter',
412-
'observedProperty': {
413-
'label': {
414-
'en': p_label
415-
}
416-
},
417-
'unit': {
418-
'label': {
419-
'en': value['title']
420-
},
421-
'symbol': {
422-
'value': value['x-ogc-unit'],
423-
'type': 'http://www.opengis.net/def/uom/UCUM/'
424-
}
425-
}
426-
}
427-
428-
if p_description is not None:
429-
data['parameter_names'][key]['observedProperty'].update({
430-
'description': {
431-
'en': p_description
432-
}
433-
})
403+
data['parameter_names'] = p.get_parameters()
434404

435405
for qt in p.get_query_types():
436406
data_query = {

pygeoapi/provider/base_edr.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,57 @@ def get_query_types(self):
105105

106106
return self.query_types
107107

108+
def get_parameters(
109+
self, parameters: set | list = [], as_list=False
110+
) -> dict | list:
111+
"""
112+
Generate CoverageJSON parameters from provider field defintions
113+
114+
:param parameters: List of the subset of parameters include.
115+
:param as_list: bool to return as a list of parameter definitions.
116+
GeoJSON parameters are returned as an array
117+
https://github.com/opengeospatial/ogcapi-environmental-data-retrieval/issues/633
118+
119+
120+
:returns: A dictionary or list containing the parameter definition.
121+
"""
122+
if not parameters:
123+
parameters = set(self.fields.keys())
124+
125+
out_params = {}
126+
for name in set(parameters):
127+
conf_ = self.fields[name]
128+
p_label = conf_.get('title')
129+
out_params[name] = {
130+
'id': name,
131+
'type': 'Parameter',
132+
'name': p_label,
133+
'observedProperty': {
134+
'id': name,
135+
'label': {'en': p_label}
136+
},
137+
'unit': {
138+
'symbol': {
139+
'value': conf_['x-ogc-unit'],
140+
'type': 'http://www.opengis.net/def/uom/UCUM/'
141+
}
142+
}
143+
}
144+
145+
# Add description if available
146+
p_description = conf_.get('description')
147+
if p_description is not None:
148+
out_params[name]['observedProperty'].update({
149+
'description': {
150+
'en': p_description
151+
}
152+
})
153+
154+
if as_list:
155+
return list(out_params.values())
156+
else:
157+
return out_params
158+
108159
def query(self, **kwargs):
109160
"""
110161
Extract data from collection collection

pygeoapi/provider/xarray_.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
ProviderConnectionError,
4545
ProviderNoDataError,
4646
ProviderQueryError)
47+
from pygeoapi.provider.base_edr import BaseEDRProvider
4748
from pygeoapi.util import read_data
4849

4950
LOGGER = logging.getLogger(__name__)
@@ -378,24 +379,9 @@ def gen_covjson(self, metadata, data, fields):
378379
})
379380

380381
LOGGER.debug('Adding parameters')
381-
for key, value in selected_fields.items():
382-
parameter = {
383-
'type': 'Parameter',
384-
'description': {
385-
'en': value['title']
386-
},
387-
'unit': {
388-
'symbol': value['x-ogc-unit']
389-
},
390-
'observedProperty': {
391-
'id': key,
392-
'label': {
393-
'en': value['title']
394-
}
395-
}
396-
}
397-
398-
cj['parameters'][key] = parameter
382+
cj['parameters'] = BaseEDRProvider.get_parameters(
383+
self, selected_fields
384+
)
399385

400386
data = data.fillna(None)
401387

tests/api/test_environmental_data_retrieval.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ def test_describe_collection_edr(config, api_):
5454
assert sst['id'] == 'SST'
5555
assert sst['type'] == 'Parameter'
5656
assert sst['observedProperty']['label']['en'] == 'SEA SURFACE TEMPERATURE'
57-
assert sst['unit']['label']['en'] == 'SEA SURFACE TEMPERATURE'
5857
assert sst['unit']['symbol']['value'] == 'Deg C'
5958

6059

0 commit comments

Comments
 (0)