Skip to content

Commit 89aced4

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 6caf4c4 commit 89aced4

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/lithic/_base_client.py

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

543543
prepared_url = self._prepare_url(options.url)
544+
# preserve hard-coded query params from the url
545+
if params and prepared_url.query:
546+
params = {**dict(prepared_url.params.items()), **params}
547+
prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
544548
if "_" in prepared_url.host:
545549
# work around https://github.com/encode/httpx/discussions/2880
546550
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
@@ -427,6 +427,30 @@ def test_default_query_option(self) -> None:
427427

428428
client.close()
429429

430+
def test_hardcoded_query_params_in_url(self, client: Lithic) -> None:
431+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
432+
url = httpx.URL(request.url)
433+
assert dict(url.params) == {"beta": "true"}
434+
435+
request = client._build_request(
436+
FinalRequestOptions(
437+
method="get",
438+
url="/foo?beta=true",
439+
params={"limit": "10", "page": "abc"},
440+
)
441+
)
442+
url = httpx.URL(request.url)
443+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
444+
445+
request = client._build_request(
446+
FinalRequestOptions(
447+
method="get",
448+
url="/files/a%2Fb?beta=true",
449+
params={"limit": "10"},
450+
)
451+
)
452+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
453+
430454
def test_request_extra_json(self, client: Lithic) -> None:
431455
request = client._build_request(
432456
FinalRequestOptions(
@@ -1355,6 +1379,30 @@ async def test_default_query_option(self) -> None:
13551379

13561380
await client.close()
13571381

1382+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncLithic) -> None:
1383+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1384+
url = httpx.URL(request.url)
1385+
assert dict(url.params) == {"beta": "true"}
1386+
1387+
request = async_client._build_request(
1388+
FinalRequestOptions(
1389+
method="get",
1390+
url="/foo?beta=true",
1391+
params={"limit": "10", "page": "abc"},
1392+
)
1393+
)
1394+
url = httpx.URL(request.url)
1395+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1396+
1397+
request = async_client._build_request(
1398+
FinalRequestOptions(
1399+
method="get",
1400+
url="/files/a%2Fb?beta=true",
1401+
params={"limit": "10"},
1402+
)
1403+
)
1404+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1405+
13581406
def test_request_extra_json(self, client: Lithic) -> None:
13591407
request = client._build_request(
13601408
FinalRequestOptions(

0 commit comments

Comments
 (0)