From b05362db298dced665b336e33615f702996c3650 Mon Sep 17 00:00:00 2001 From: "Allen, Jeffrey (Contractor)" Date: Mon, 7 Jul 2025 09:38:14 -0600 Subject: [PATCH 1/3] feat: let the provider handle link generation - Give the provider what it needs to build a full URI --- pygeoapi/api/itemtypes.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pygeoapi/api/itemtypes.py b/pygeoapi/api/itemtypes.py index 25d37ef5f..b02c6e633 100644 --- a/pygeoapi/api/itemtypes.py +++ b/pygeoapi/api/itemtypes.py @@ -539,6 +539,16 @@ def get_collection_items( LOGGER.debug(f'filter-lang: {filter_lang}') LOGGER.debug(f'filter-crs: {filter_crs_uri}') + uri = f'{api.get_collections_url()}/{dataset}/items' + + serialized_query_params = '' + for k, v in request.params.items(): + if k not in ('f', 'offset', 'cursor'): + serialized_query_params += '&' + serialized_query_params += urllib.parse.quote(k, safe='') + serialized_query_params += '=' + serialized_query_params += urllib.parse.quote(str(v), safe=',') + try: content = p.query(offset=offset, limit=limit, resulttype=resulttype, bbox=bbox, @@ -546,25 +556,18 @@ def get_collection_items( sortby=sortby, skip_geometry=skip_geometry, select_properties=select_properties, crs_transform_spec=crs_transform_spec, - q=q, language=prv_locale, filterq=filter_) + q=q, language=prv_locale, filterq=filter_, + serialized_query_params=serialized_query_params, uri=uri) except ProviderGenericError as err: return api.get_exception( err.http_status_code, headers, request.format, err.ogc_exception_code, err.message) - serialized_query_params = '' - for k, v in request.params.items(): - if k not in ('f', 'offset'): - serialized_query_params += '&' - serialized_query_params += urllib.parse.quote(k, safe='') - serialized_query_params += '=' - serialized_query_params += urllib.parse.quote(str(v), safe=',') if 'links' not in content: content['links'] = [] # TODO: translate titles - uri = f'{api.get_collections_url()}/{dataset}/items' content['links'].extend([{ 'type': 'application/geo+json', 'rel': request.get_linkrel(F_JSON), From d89562b7ae9e90009405a3a4a93590ca0c302a34 Mon Sep 17 00:00:00 2001 From: "Allen, Jeffrey (Contractor)" Date: Fri, 25 Jul 2025 07:29:35 -0600 Subject: [PATCH 2/3] cleanup: remove cursor from excluded query params --- pygeoapi/api/itemtypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygeoapi/api/itemtypes.py b/pygeoapi/api/itemtypes.py index b02c6e633..5f9a3ecb6 100644 --- a/pygeoapi/api/itemtypes.py +++ b/pygeoapi/api/itemtypes.py @@ -543,7 +543,7 @@ def get_collection_items( serialized_query_params = '' for k, v in request.params.items(): - if k not in ('f', 'offset', 'cursor'): + if k not in ('f', 'offset'): serialized_query_params += '&' serialized_query_params += urllib.parse.quote(k, safe='') serialized_query_params += '=' From f74059ec17cfafd34abbf37262b479ad8c0ce95c Mon Sep 17 00:00:00 2001 From: "Allen, Jeffrey (Contractor)" Date: Fri, 25 Jul 2025 07:32:29 -0600 Subject: [PATCH 3/3] fix: clean up flake8 issues --- pygeoapi/api/itemtypes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pygeoapi/api/itemtypes.py b/pygeoapi/api/itemtypes.py index 5f9a3ecb6..38fdc5557 100644 --- a/pygeoapi/api/itemtypes.py +++ b/pygeoapi/api/itemtypes.py @@ -557,13 +557,13 @@ def get_collection_items( select_properties=select_properties, crs_transform_spec=crs_transform_spec, q=q, language=prv_locale, filterq=filter_, - serialized_query_params=serialized_query_params, uri=uri) + serialized_query_params=serialized_query_params, + uri=uri) except ProviderGenericError as err: return api.get_exception( err.http_status_code, headers, request.format, err.ogc_exception_code, err.message) - if 'links' not in content: content['links'] = []