Skip to content

Commit cbdc71f

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent a8c0285 commit cbdc71f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/imagekitio/_base_client.py

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

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

476476
client.close()
477477

478+
def test_hardcoded_query_params_in_url(self, client: ImageKit) -> None:
479+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
480+
url = httpx.URL(request.url)
481+
assert dict(url.params) == {"beta": "true"}
482+
483+
request = client._build_request(
484+
FinalRequestOptions(
485+
method="get",
486+
url="/foo?beta=true",
487+
params={"limit": "10", "page": "abc"},
488+
)
489+
)
490+
url = httpx.URL(request.url)
491+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
492+
493+
request = client._build_request(
494+
FinalRequestOptions(
495+
method="get",
496+
url="/files/a%2Fb?beta=true",
497+
params={"limit": "10"},
498+
)
499+
)
500+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
501+
478502
def test_request_extra_json(self, client: ImageKit) -> None:
479503
request = client._build_request(
480504
FinalRequestOptions(
@@ -1455,6 +1479,30 @@ async def test_default_query_option(self) -> None:
14551479

14561480
await client.close()
14571481

1482+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncImageKit) -> None:
1483+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1484+
url = httpx.URL(request.url)
1485+
assert dict(url.params) == {"beta": "true"}
1486+
1487+
request = async_client._build_request(
1488+
FinalRequestOptions(
1489+
method="get",
1490+
url="/foo?beta=true",
1491+
params={"limit": "10", "page": "abc"},
1492+
)
1493+
)
1494+
url = httpx.URL(request.url)
1495+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1496+
1497+
request = async_client._build_request(
1498+
FinalRequestOptions(
1499+
method="get",
1500+
url="/files/a%2Fb?beta=true",
1501+
params={"limit": "10"},
1502+
)
1503+
)
1504+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1505+
14581506
def test_request_extra_json(self, client: ImageKit) -> None:
14591507
request = client._build_request(
14601508
FinalRequestOptions(

0 commit comments

Comments
 (0)