Skip to content

Commit 97b0911

Browse files
authored
Allow url encoded queries (#504)
1 parent d53e792 commit 97b0911

File tree

5 files changed

+23
-5
lines changed

5 files changed

+23
-5
lines changed

CHANGES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
### Fixed
1212

13+
* Allow url encoded values for `query` in GET requests ([#504](https://github.com/stac-utils/stac-fastapi/pull/504))
14+
1315
## [2.4.3]
1416

1517
### Added
@@ -22,7 +24,6 @@
2224

2325
### Fixed
2426

25-
2627
## [2.4.2]
2728

2829
### Added

stac_fastapi/pgstac/stac_fastapi/pgstac/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33
from datetime import datetime
44
from typing import Any, Dict, List, Optional, Union
5-
from urllib.parse import urljoin
5+
from urllib.parse import unquote_plus, urljoin
66

77
import attr
88
import orjson
@@ -372,7 +372,7 @@ async def get_search(
372372
"bbox": bbox,
373373
"limit": limit,
374374
"token": token,
375-
"query": orjson.loads(query) if query else query,
375+
"query": orjson.loads(unquote_plus(query)) if query else query,
376376
}
377377

378378
if filter:

stac_fastapi/pgstac/tests/api/test_api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from datetime import datetime, timedelta
2+
from urllib.parse import quote_plus
23

4+
import orjson
35
import pytest
46

57
STAC_CORE_ROUTES = [
@@ -102,6 +104,12 @@ async def test_app_query_extension(load_test_data, app_client, load_test_collect
102104
resp_json = resp.json()
103105
assert len(resp_json["features"]) == 1
104106

107+
params["query"] = quote_plus(orjson.dumps(params["query"]))
108+
resp = await app_client.get("/search", params=params)
109+
assert resp.status_code == 200
110+
resp_json = resp.json()
111+
assert len(resp_json["features"]) == 1
112+
105113

106114
async def test_app_query_extension_limit_1(
107115
load_test_data, app_client, load_test_collection

stac_fastapi/sqlalchemy/stac_fastapi/sqlalchemy/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import operator
55
from datetime import datetime
66
from typing import List, Optional, Set, Type, Union
7-
from urllib.parse import urlencode, urljoin
7+
from urllib.parse import unquote_plus, urlencode, urljoin
88

99
import attr
1010
import geoalchemy2 as ga
@@ -243,7 +243,7 @@ def get_search(
243243
"bbox": bbox,
244244
"limit": limit,
245245
"token": token,
246-
"query": json.loads(query) if query else query,
246+
"query": json.loads(unquote_plus(query)) if query else query,
247247
}
248248

249249
if datetime:

stac_fastapi/sqlalchemy/tests/api/test_api.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from datetime import datetime, timedelta
2+
from urllib.parse import quote_plus
3+
4+
import orjson
25

36
from ..conftest import MockStarletteRequest
47

@@ -150,6 +153,12 @@ def test_app_query_extension_gt(load_test_data, app_client, postgres_transaction
150153
resp_json = resp.json()
151154
assert len(resp_json["features"]) == 0
152155

156+
params["query"] = quote_plus(orjson.dumps(params["query"]))
157+
resp = app_client.get("/search", params=params)
158+
assert resp.status_code == 200
159+
resp_json = resp.json()
160+
assert len(resp_json["features"]) == 0
161+
153162

154163
def test_app_query_extension_gte(load_test_data, app_client, postgres_transactions):
155164
test_item = load_test_data("test_item.json")

0 commit comments

Comments
 (0)