Skip to content

Commit f3dc171

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 7b21e9c commit f3dc171

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/neptune_api_v2/_base_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,10 @@ def _build_request(
558558
files = cast(HttpxRequestFiles, ForceMultipartDict())
559559

560560
prepared_url = self._prepare_url(options.url)
561+
# preserve hard-coded query params from the url
562+
if params and prepared_url.query:
563+
params = {**dict(prepared_url.params.items()), **params}
564+
prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
561565
if "_" in prepared_url.host:
562566
# work around https://github.com/encode/httpx/discussions/2880
563567
kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}

tests/test_client.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,30 @@ def test_default_query_option(self) -> None:
394394

395395
client.close()
396396

397+
def test_hardcoded_query_params_in_url(self, client: NeptuneAPIV2) -> None:
398+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
399+
url = httpx.URL(request.url)
400+
assert dict(url.params) == {"beta": "true"}
401+
402+
request = client._build_request(
403+
FinalRequestOptions(
404+
method="get",
405+
url="/foo?beta=true",
406+
params={"limit": "10", "page": "abc"},
407+
)
408+
)
409+
url = httpx.URL(request.url)
410+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
411+
412+
request = client._build_request(
413+
FinalRequestOptions(
414+
method="get",
415+
url="/files/a%2Fb?beta=true",
416+
params={"limit": "10"},
417+
)
418+
)
419+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
420+
397421
def test_request_extra_json(self, client: NeptuneAPIV2) -> None:
398422
request = client._build_request(
399423
FinalRequestOptions(
@@ -1255,6 +1279,30 @@ async def test_default_query_option(self) -> None:
12551279

12561280
await client.close()
12571281

1282+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncNeptuneAPIV2) -> None:
1283+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1284+
url = httpx.URL(request.url)
1285+
assert dict(url.params) == {"beta": "true"}
1286+
1287+
request = async_client._build_request(
1288+
FinalRequestOptions(
1289+
method="get",
1290+
url="/foo?beta=true",
1291+
params={"limit": "10", "page": "abc"},
1292+
)
1293+
)
1294+
url = httpx.URL(request.url)
1295+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1296+
1297+
request = async_client._build_request(
1298+
FinalRequestOptions(
1299+
method="get",
1300+
url="/files/a%2Fb?beta=true",
1301+
params={"limit": "10"},
1302+
)
1303+
)
1304+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1305+
12581306
def test_request_extra_json(self, client: NeptuneAPIV2) -> None:
12591307
request = client._build_request(
12601308
FinalRequestOptions(

0 commit comments

Comments
 (0)