Skip to content

Commit 9e86464

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 0def55c commit 9e86464

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/beeper_desktop_api/_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
@@ -443,6 +443,30 @@ def test_default_query_option(self) -> None:
443443

444444
client.close()
445445

446+
def test_hardcoded_query_params_in_url(self, client: BeeperDesktop) -> None:
447+
request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
448+
url = httpx.URL(request.url)
449+
assert dict(url.params) == {"beta": "true"}
450+
451+
request = client._build_request(
452+
FinalRequestOptions(
453+
method="get",
454+
url="/foo?beta=true",
455+
params={"limit": "10", "page": "abc"},
456+
)
457+
)
458+
url = httpx.URL(request.url)
459+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
460+
461+
request = client._build_request(
462+
FinalRequestOptions(
463+
method="get",
464+
url="/files/a%2Fb?beta=true",
465+
params={"limit": "10"},
466+
)
467+
)
468+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
469+
446470
def test_request_extra_json(self, client: BeeperDesktop) -> None:
447471
request = client._build_request(
448472
FinalRequestOptions(
@@ -1366,6 +1390,30 @@ async def test_default_query_option(self) -> None:
13661390

13671391
await client.close()
13681392

1393+
async def test_hardcoded_query_params_in_url(self, async_client: AsyncBeeperDesktop) -> None:
1394+
request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true"))
1395+
url = httpx.URL(request.url)
1396+
assert dict(url.params) == {"beta": "true"}
1397+
1398+
request = async_client._build_request(
1399+
FinalRequestOptions(
1400+
method="get",
1401+
url="/foo?beta=true",
1402+
params={"limit": "10", "page": "abc"},
1403+
)
1404+
)
1405+
url = httpx.URL(request.url)
1406+
assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"}
1407+
1408+
request = async_client._build_request(
1409+
FinalRequestOptions(
1410+
method="get",
1411+
url="/files/a%2Fb?beta=true",
1412+
params={"limit": "10"},
1413+
)
1414+
)
1415+
assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10"
1416+
13691417
def test_request_extra_json(self, client: BeeperDesktop) -> None:
13701418
request = client._build_request(
13711419
FinalRequestOptions(

0 commit comments

Comments
 (0)