From 6c538ca33008bcf618597a96dbe930f0525c7be4 Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Wed, 24 Jul 2024 16:11:44 -0400 Subject: [PATCH] raise error for collections without queryables (#1757) --- pygeoapi/api/itemtypes.py | 6 ++++++ tests/api/test_itemtypes.py | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/pygeoapi/api/itemtypes.py b/pygeoapi/api/itemtypes.py index b43d759..1fa70c2 100644 --- a/pygeoapi/api/itemtypes.py +++ b/pygeoapi/api/itemtypes.py @@ -134,6 +134,12 @@ def get_collection_queryables(api: API, request: Union[APIRequest, Any], LOGGER.debug('Loading record provider') p = load_plugin('provider', get_provider_by_type( api.config['resources'][dataset]['providers'], 'record')) + finally: + msg = 'queryables not available for this collection' + return api.get_exception( + HTTPStatus.BAD_REQUEST, headers, request.format, + 'NoApplicableError', msg) + except ProviderGenericError as err: return api.get_exception( err.http_status_code, headers, request.format, diff --git a/tests/api/test_itemtypes.py b/tests/api/test_itemtypes.py index 2082283..283bb0c 100644 --- a/tests/api/test_itemtypes.py +++ b/tests/api/test_itemtypes.py @@ -62,6 +62,11 @@ def test_get_collection_queryables(config, api_): api_, req, 'notfound') assert code == HTTPStatus.NOT_FOUND + req = mock_api_request() + rsp_headers, code, response = get_collection_queryables( + api_, req, 'mapserver_world_map') + assert code == HTTPStatus.BAD_REQUEST + req = mock_api_request({'f': 'html'}) rsp_headers, code, response = get_collection_queryables(api_, req, 'obs') assert rsp_headers['Content-Type'] == FORMAT_TYPES[F_HTML]