Skip to content

Commit b7f0b1d

Browse files
fix(client): preserve hardcoded query params when merging with user params
1 parent 3e12437 commit b7f0b1d

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/gitpod/_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
@@ -438,6 +438,30 @@ def test_default_query_option(self) -> None:
438438

439439
client.close()
440440

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

13641388
await client.close()
13651389

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

0 commit comments

Comments
 (0)