Skip to content

Commit 2db1259

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 5132e59 commit 2db1259

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/rollin/_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
@@ -419,6 +419,30 @@ def test_default_query_option(self) -> None:
419419

420420
client.close()
421421

422+
def test_hardcoded_query_params_in_url(self, client: Rollin) -> None:
423+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
424+
url = httpx.URL(request.url)
425+
assert dict(url.params) == {"beta": "true"}
426+
427+
request = client._build_request(
428+
FinalRequestOptions(
429+
method="get",
430+
url="/foo?beta=true",
431+
params={"limit": "10", "page": "abc"},
432+
)
433+
)
434+
url = httpx.URL(request.url)
435+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
436+
437+
request = client._build_request(
438+
FinalRequestOptions(
439+
method="get",
440+
url="/files/a%2Fb?beta=true",
441+
params={"limit": "10"},
442+
)
443+
)
444+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
445+
422446
def test_request_extra_json(self, client: Rollin) -> None:
423447
request = client._build_request(
424448
FinalRequestOptions(
@@ -1295,6 +1319,30 @@ async def test_default_query_option(self) -> None:
12951319

12961320
await client.close()
12971321

1322+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncRollin) -> None:
1323+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1324+
url = httpx.URL(request.url)
1325+
assert dict(url.params) == {"beta": "true"}
1326+
1327+
request = async_client._build_request(
1328+
FinalRequestOptions(
1329+
method="get",
1330+
url="/foo?beta=true",
1331+
params={"limit": "10", "page": "abc"},
1332+
)
1333+
)
1334+
url = httpx.URL(request.url)
1335+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1336+
1337+
request = async_client._build_request(
1338+
FinalRequestOptions(
1339+
method="get",
1340+
url="/files/a%2Fb?beta=true",
1341+
params={"limit": "10"},
1342+
)
1343+
)
1344+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1345+
12981346
def test_request_extra_json(self, client: Rollin) -> None:
12991347
request = client._build_request(
13001348
FinalRequestOptions(

0 commit comments

Comments
 (0)