Skip to content

Commit 9d1b3a5

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 25c43d2 commit 9d1b3a5

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/dedalus_sdk/_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
@@ -437,6 +437,30 @@ def test_default_query_option(self) -> None:
437437

438438
client.close()
439439

440+
def test_hardcoded_query_params_in_url(self, client: Dedalus) -> None:
441+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
442+
url = httpx.URL(request.url)
443+
assert dict(url.params) == {"beta": "true"}
444+
445+
request = client._build_request(
446+
FinalRequestOptions(
447+
method="get",
448+
url="/foo?beta=true",
449+
params={"limit": "10", "page": "abc"},
450+
)
451+
)
452+
url = httpx.URL(request.url)
453+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
454+
455+
request = client._build_request(
456+
FinalRequestOptions(
457+
method="get",
458+
url="/files/a%2Fb?beta=true",
459+
params={"limit": "10"},
460+
)
461+
)
462+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
463+
440464
def test_request_extra_json(self, client: Dedalus) -> None:
441465
request = client._build_request(
442466
FinalRequestOptions(
@@ -1383,6 +1407,30 @@ async def test_default_query_option(self) -> None:
13831407

13841408
await client.close()
13851409

1410+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncDedalus) -> None:
1411+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1412+
url = httpx.URL(request.url)
1413+
assert dict(url.params) == {"beta": "true"}
1414+
1415+
request = async_client._build_request(
1416+
FinalRequestOptions(
1417+
method="get",
1418+
url="/foo?beta=true",
1419+
params={"limit": "10", "page": "abc"},
1420+
)
1421+
)
1422+
url = httpx.URL(request.url)
1423+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1424+
1425+
request = async_client._build_request(
1426+
FinalRequestOptions(
1427+
method="get",
1428+
url="/files/a%2Fb?beta=true",
1429+
params={"limit": "10"},
1430+
)
1431+
)
1432+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1433+
13861434
def test_request_extra_json(self, client: Dedalus) -> None:
13871435
request = client._build_request(
13881436
FinalRequestOptions(

0 commit comments

Comments
 (0)