From 78665293013260e217b6f1e4c86b52cd65fa7879 Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Fri, 15 Dec 2023 13:14:15 -0500 Subject: [PATCH 1/3] provide EDR metadata and links also for collections endpoint --- pygeoapi/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygeoapi/api.py b/pygeoapi/api.py index 3d34ba5..d6eef5e 100644 --- a/pygeoapi/api.py +++ b/pygeoapi/api.py @@ -1185,7 +1185,7 @@ class API: except ProviderTypeError: edr = None - if edr and dataset is not None: + if edr: # TODO: translate LOGGER.debug('Adding EDR links') try: From 0a24d58a27a7f3e426d28fe75dea3f5a6353058c Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Fri, 15 Dec 2023 13:27:58 -0500 Subject: [PATCH 2/3] fix --- pygeoapi/api.py | 52 +++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/pygeoapi/api.py b/pygeoapi/api.py index d6eef5e..7645e04 100644 --- a/pygeoapi/api.py +++ b/pygeoapi/api.py @@ -1182,41 +1182,37 @@ class API: try: edr = get_provider_by_type(v['providers'], 'edr') + p = load_plugin('provider', edr) + except ProviderConnectionError: + msg = 'connection error (check logs)' + return self.get_exception( + HTTPStatus.INTERNAL_SERVER_ERROR, headers, + request.format, 'NoApplicableCode', msg) except ProviderTypeError: edr = None if edr: # TODO: translate LOGGER.debug('Adding EDR links') - try: - p = load_plugin('provider', get_provider_by_type( - self.config['resources'][dataset]['providers'], 'edr')) - parameters = p.get_fields() - if parameters: - collection['parameter-names'] = {} - for f in parameters['field']: - collection['parameter-names'][f['id']] = f + parameters = p.get_fields() + if parameters: + collection['parameter-names'] = {} + for f in parameters['field']: + collection['parameter-names'][f['id']] = f - for qt in p.get_query_types(): - collection['links'].append({ - 'type': 'application/json', - 'rel': 'data', - 'title': f'{qt} query for this collection as JSON', - 'href': f'{self.get_collections_url()}/{k}/{qt}?f={F_JSON}' # noqa - }) - collection['links'].append({ - 'type': FORMAT_TYPES[F_HTML], - 'rel': 'data', - 'title': f'{qt} query for this collection as HTML', - 'href': f'{self.get_collections_url()}/{k}/{qt}?f={F_HTML}' # noqa - }) - except ProviderConnectionError: - msg = 'connection error (check logs)' - return self.get_exception( - HTTPStatus.INTERNAL_SERVER_ERROR, headers, - request.format, 'NoApplicableCode', msg) - except ProviderTypeError: - pass + for qt in p.get_query_types(): + collection['links'].append({ + 'type': 'application/json', + 'rel': 'data', + 'title': f'{qt} query for this collection as JSON', + 'href': f'{self.get_collections_url()}/{k}/{qt}?f={F_JSON}' # noqa + }) + collection['links'].append({ + 'type': FORMAT_TYPES[F_HTML], + 'rel': 'data', + 'title': f'{qt} query for this collection as HTML', + 'href': f'{self.get_collections_url()}/{k}/{qt}?f={F_HTML}' # noqa + }) if dataset is not None and k == dataset: fcm = collection From be940be5d13d3cc58c0acc62d465cd7ce4ce3048 Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Sat, 16 Dec 2023 04:15:02 -0500 Subject: [PATCH 3/3] fix EDR parameter names (#1433) --- pygeoapi/api.py | 10 +++++----- tests/test_api.py | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pygeoapi/api.py b/pygeoapi/api.py index 7645e04..2d1bb53 100644 --- a/pygeoapi/api.py +++ b/pygeoapi/api.py @@ -1196,9 +1196,9 @@ class API: LOGGER.debug('Adding EDR links') parameters = p.get_fields() if parameters: - collection['parameter-names'] = {} + collection['parameter_names'] = {} for f in parameters['field']: - collection['parameter-names'][f['id']] = f + collection['parameter_names'][f['id']] = f for qt in p.get_query_types(): collection['links'].append({ @@ -3764,8 +3764,8 @@ class API: HTTPStatus.BAD_REQUEST, headers, request.format, 'InvalidParameterValue', msg) - LOGGER.debug('Processing parameter-name parameter') - parameternames = request.params.get('parameter-name') or [] + LOGGER.debug('Processing parameter_names parameter') + parameternames = request.params.get('parameter_names') or [] if isinstance(parameternames, str): parameternames = parameternames.split(',') @@ -3841,7 +3841,7 @@ class API: if parameternames and not any((fld['id'] in parameternames) for fld in p.get_fields()['field']): - msg = 'Invalid parameter-name' + msg = 'Invalid parameter_names' return self.get_exception( HTTPStatus.BAD_REQUEST, headers, request.format, 'InvalidParameterValue', msg) diff --git a/tests/test_api.py b/tests/test_api.py index 4e522c3..582bb6e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1883,7 +1883,7 @@ def test_get_collection_edr_query(config, api_): req = mock_request() rsp_headers, code, response = api_.describe_collections(req, 'icoads-sst') collection = json.loads(response) - parameter_names = list(collection['parameter-names'].keys()) + parameter_names = list(collection['parameter_names'].keys()) parameter_names.sort() assert len(parameter_names) == 4 assert parameter_names == ['AIRT', 'SST', 'UWND', 'VWND'] @@ -1905,9 +1905,9 @@ def test_get_collection_edr_query(config, api_): req, 'icoads-sst', None, 'position') assert code == HTTPStatus.BAD_REQUEST - # bad parameter-name parameter + # bad parameter_names parameter req = mock_request({ - 'coords': 'POINT(11 11)', 'parameter-name': 'bad' + 'coords': 'POINT(11 11)', 'parameter_names': 'bad' }) rsp_headers, code, response = api_.get_collection_edr_query( req, 'icoads-sst', None, 'position') @@ -1938,7 +1938,7 @@ def test_get_collection_edr_query(config, api_): # single parameter req = mock_request({ - 'coords': 'POINT(11 11)', 'parameter-name': 'SST' + 'coords': 'POINT(11 11)', 'parameter_names': 'SST' }) rsp_headers, code, response = api_.get_collection_edr_query( req, 'icoads-sst', None, 'position') @@ -2055,7 +2055,7 @@ def test_get_collection_edr_query(config, api_): # cube decreasing latitude coords and S3 req = mock_request({ 'bbox': '-100,40,-99,45', - 'parameter-name': 'tmn', + 'parameter_names': 'tmn', 'datetime': '1994-01-01/1994-12-31', })