From 48fdd3712f55ba170bb469b578d84a0d1a28fb40 Mon Sep 17 00:00:00 2001 From: tcchase Date: Thu, 22 May 2025 15:30:50 -0400 Subject: [PATCH 01/10] fix: cast range values to integers --- src/SearchAPI/application/asf_opts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SearchAPI/application/asf_opts.py b/src/SearchAPI/application/asf_opts.py index 6647e5b..9c83f36 100644 --- a/src/SearchAPI/application/asf_opts.py +++ b/src/SearchAPI/application/asf_opts.py @@ -23,7 +23,7 @@ def string_to_range(v: Union[str, list]) -> tuple: if m is None: raise ValueError(f'Invalid range: {v}') a = (m.group(1), m.group(3)) - if a[0] > a[1]: + if int(a[0]) > int(a[1]): raise ValueError() if a[0] == a[1]: a = a[0] From cd08896e6fe6da7046afd309008ac94c687394a7 Mon Sep 17 00:00:00 2001 From: tcchase Date: Thu, 22 May 2025 16:09:10 -0400 Subject: [PATCH 02/10] fix: use float instead of int --- src/SearchAPI/application/asf_opts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SearchAPI/application/asf_opts.py b/src/SearchAPI/application/asf_opts.py index 9c83f36..564364b 100644 --- a/src/SearchAPI/application/asf_opts.py +++ b/src/SearchAPI/application/asf_opts.py @@ -23,7 +23,7 @@ def string_to_range(v: Union[str, list]) -> tuple: if m is None: raise ValueError(f'Invalid range: {v}') a = (m.group(1), m.group(3)) - if int(a[0]) > int(a[1]): + if float(a[0]) > float(a[1]): raise ValueError() if a[0] == a[1]: a = a[0] From ab7ad4ca0c8d6fa1de5e18db2c6fc40a641e2f4c Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Fri, 23 May 2025 12:19:44 -0800 Subject: [PATCH 03/10] bug: require searches have search related parameters --- src/SearchAPI/application/asf_opts.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/SearchAPI/application/asf_opts.py b/src/SearchAPI/application/asf_opts.py index 6647e5b..4511d27 100644 --- a/src/SearchAPI/application/asf_opts.py +++ b/src/SearchAPI/application/asf_opts.py @@ -13,6 +13,7 @@ from .logger import api_logger +non_search_param = ['output', 'maxresults', 'pagesize', 'maturity'] def string_to_range(v: Union[str, list]) -> tuple: if isinstance(v, list): @@ -162,6 +163,16 @@ async def process_search_request(request: Request) -> SearchOptsModel: query_opts.merge_args(**dict(body_opts)) + try: + any_searchables = any([key.lower() not in non_search_param for key, _ in query_opts]) + if not any_searchables: + raise ValueError( + 'No searchable parameters specified, queries must include' + ' parameters besides output= and maxresults=' + ) + except ValueError as exc: + raise HTTPException(detail=repr(exc), status_code=400) from exc + merged_args = {**query_params, **body} if (token := merged_args.get('cmr_token')): From e0c492125f372b3459b51d5421e390e1d0068287 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Fri, 23 May 2025 12:20:56 -0800 Subject: [PATCH 04/10] update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eed2775..1bed5b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,12 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - --> +------ +## [1.0.2](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.1...v1.0.2) + +### Fixed +- Generic searches (non-search related params) no longer accepted, raise 400 + ------ ## [1.0.1](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.0...v1.0.1) From b15f7e6bf77419bddecac371c731bd98d30c7b3b Mon Sep 17 00:00:00 2001 From: Kim <33294735+SpicyGarlicAlbacoreRoll@users.noreply.github.com> Date: Fri, 23 May 2025 12:23:01 -0800 Subject: [PATCH 05/10] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bed5b2..f296673 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Generic searches (non-search related params) no longer accepted, raise 400 +- Fixed string comparison of numbers in range filters ------ ## [1.0.1](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.0...v1.0.1) From b4db015bb814213f97f5196c4af268978fb8a959 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Fri, 23 May 2025 12:59:15 -0800 Subject: [PATCH 06/10] change: include wkt in error in validate_wkt() --- CHANGELOG.md | 3 +++ src/SearchAPI/application/application.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f296673..a418dea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Generic searches (non-search related params) no longer accepted, raise 400 - Fixed string comparison of numbers in range filters +### Changed +- Include wkt in error when raising in `validate_wkt()` + ------ ## [1.0.1](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.0...v1.0.1) diff --git a/src/SearchAPI/application/application.py b/src/SearchAPI/application/application.py index 30195e8..bd84e02 100644 --- a/src/SearchAPI/application/application.py +++ b/src/SearchAPI/application/application.py @@ -222,7 +222,7 @@ def validate_wkt(wkt: str): wrapped, unwrapped, reports = asf.validate_wkt(wkt) repairs = [{'type': report.report_type, 'report': report.report} for report in reports if report.report_type != "'type': 'WRAP'"] except Exception as exc: - raise HTTPException(detail=f"Failed to validate wkt: {exc}", status_code=400) from exc + raise HTTPException(detail=f"Failed to validate wkt {wkt}: {exc}", status_code=400) from exc return { 'wkt': { From b772bccd9ce3091b92d13c3c654176139b91aba2 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Fri, 23 May 2025 13:10:54 -0800 Subject: [PATCH 07/10] pin pyshp version to 2.1.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8aacbdc..026613b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ watchfiles==0.19.0 asf_search==8.2.3 python-json-logger==2.0.7 -pyshp +pyshp==2.1.3 geopandas geomet kml2geojson From 8b65b22e67dbb49db3ad7789b086d5d1ad5ed5da Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Fri, 23 May 2025 13:43:51 -0800 Subject: [PATCH 08/10] fix: move empty search check to query_param method for baseline functionality to work --- src/SearchAPI/application/application.py | 11 +++++++++++ src/SearchAPI/application/asf_opts.py | 10 ---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/SearchAPI/application/application.py b/src/SearchAPI/application/application.py index bd84e02..9744e6c 100644 --- a/src/SearchAPI/application/application.py +++ b/src/SearchAPI/application/application.py @@ -42,6 +42,17 @@ async def query_params(searchOptions: SearchOptsModel = Depends(process_search_r output = searchOptions.output opts = searchOptions.opts + non_search_param = ['output', 'maxresults', 'pagesize', 'maturity'] + try: + any_searchables = any([key.lower() not in non_search_param for key, _ in opts]) + if not any_searchables: + raise ValueError( + 'No searchable parameters specified, queries must include' + ' parameters besides output= and maxresults=' + ) + except ValueError as exc: + raise HTTPException(detail=repr(exc), status_code=400) from exc + if output.lower() == 'count': start = time.perf_counter() count=asf.search_count(opts=opts) diff --git a/src/SearchAPI/application/asf_opts.py b/src/SearchAPI/application/asf_opts.py index f74fe89..1ca9515 100644 --- a/src/SearchAPI/application/asf_opts.py +++ b/src/SearchAPI/application/asf_opts.py @@ -163,16 +163,6 @@ async def process_search_request(request: Request) -> SearchOptsModel: query_opts.merge_args(**dict(body_opts)) - try: - any_searchables = any([key.lower() not in non_search_param for key, _ in query_opts]) - if not any_searchables: - raise ValueError( - 'No searchable parameters specified, queries must include' - ' parameters besides output= and maxresults=' - ) - except ValueError as exc: - raise HTTPException(detail=repr(exc), status_code=400) from exc - merged_args = {**query_params, **body} if (token := merged_args.get('cmr_token')): From 8f80670ba237025e7ceb6bfd5a2d738bdecadcf5 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Tue, 27 May 2025 09:22:08 -0800 Subject: [PATCH 09/10] requirements: bump asf-search minor version to 8.3.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 026613b..f1aa76c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,7 +22,7 @@ ujson==5.7.0 uvicorn==0.21.1 watchfiles==0.19.0 -asf_search==8.2.3 +asf_search==8.3.0 python-json-logger==2.0.7 pyshp==2.1.3 From d7de8f1dc61c1d998cc2a4a8da67b7952127b678 Mon Sep 17 00:00:00 2001 From: SpicyGarlicAlbacoreRoll Date: Tue, 27 May 2025 09:25:21 -0800 Subject: [PATCH 10/10] bug: changelog version in-sync with next prod-release --- CHANGELOG.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbf243d..d84c6fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,7 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --> ------ -## [1.0.2](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.1...v1.0.2) +## [1.0.1](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.0...v1.0.1) ### Fixed - Generic searches (non-search related params) no longer accepted, raise 400 @@ -35,16 +35,13 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed - Include wkt in error when raising in `validate_wkt()` ------- -## [1.0.1](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.0...v1.0.1) - ### Added - Add dedicated dev branch for test-staging deployment - Intended Dev->Release workflow - dev -> test -> prod-staging -> prod ### Changed -- pin `asf-search` to v8.2.3, All basic Vertex dataset searches working +- pin `asf-search` to v8.3.0, All basic Vertex dataset searches working ## [1.0.0](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v0.1.0...v1.0.0)