|
14 | 14 | OMIT = typing.cast(typing.Any, ...) |
15 | 15 |
|
16 | 16 |
|
| 17 | +def _add_params_to_url(url: str, params: typing.Dict[str, typing.Any]) -> str: |
| 18 | + parsed = urlparse(url) |
| 19 | + existing_params = parse_qs(parsed.query) |
| 20 | + for key, value in params.items(): |
| 21 | + existing_params[key] = value if isinstance(value, list) else [value] |
| 22 | + new_query = urlencode(existing_params, doseq=True) |
| 23 | + return urlunparse(parsed._replace(query=new_query)) |
| 24 | + |
| 25 | + |
17 | 26 | class ProxyClient: |
18 | 27 |
|
19 | 28 | def __init__(self, *, client_wrapper: SyncClientWrapper): |
@@ -77,16 +86,12 @@ def get( |
77 | 86 | url="https://example.com/api/endpoint", |
78 | 87 | external_user_id="external_user_id", |
79 | 88 | account_id="account_id", |
80 | | - headers={"Extra-Downstream-Header": "some value"} |
| 89 | + headers={"Extra-Downstream-Header": "some value"}, |
81 | 90 | params={"limit": 10}, |
82 | 91 | ) |
83 | 92 | """ |
84 | 93 | if params: |
85 | | - parsed = urlparse(url) |
86 | | - existing_params = parse_qs(parsed.query) |
87 | | - existing_params.update(params) |
88 | | - new_query = urlencode(existing_params, doseq=True) |
89 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 94 | + url = _add_params_to_url(url, params) |
90 | 95 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
91 | 96 | downstream_headers = { |
92 | 97 | f"x-pd-proxy-{header}": value |
@@ -174,11 +179,7 @@ def post( |
174 | 179 | ) |
175 | 180 | """ |
176 | 181 | if params: |
177 | | - parsed = urlparse(url) |
178 | | - existing_params = parse_qs(parsed.query) |
179 | | - existing_params.update(params) |
180 | | - new_query = urlencode(existing_params, doseq=True) |
181 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 182 | + url = _add_params_to_url(url, params) |
182 | 183 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
183 | 184 | downstream_headers = { |
184 | 185 | f"x-pd-proxy-{header}": value |
@@ -267,11 +268,7 @@ def put( |
267 | 268 | ) |
268 | 269 | """ |
269 | 270 | if params: |
270 | | - parsed = urlparse(url) |
271 | | - existing_params = parse_qs(parsed.query) |
272 | | - existing_params.update(params) |
273 | | - new_query = urlencode(existing_params, doseq=True) |
274 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 271 | + url = _add_params_to_url(url, params) |
275 | 272 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
276 | 273 | downstream_headers = { |
277 | 274 | f"x-pd-proxy-{header}": value |
@@ -352,11 +349,7 @@ def delete( |
352 | 349 | ) |
353 | 350 | """ |
354 | 351 | if params: |
355 | | - parsed = urlparse(url) |
356 | | - existing_params = parse_qs(parsed.query) |
357 | | - existing_params.update(params) |
358 | | - new_query = urlencode(existing_params, doseq=True) |
359 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 352 | + url = _add_params_to_url(url, params) |
360 | 353 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
361 | 354 | downstream_headers = { |
362 | 355 | f"x-pd-proxy-{header}": value |
@@ -444,11 +437,7 @@ def patch( |
444 | 437 | ) |
445 | 438 | """ |
446 | 439 | if params: |
447 | | - parsed = urlparse(url) |
448 | | - existing_params = parse_qs(parsed.query) |
449 | | - existing_params.update(params) |
450 | | - new_query = urlencode(existing_params, doseq=True) |
451 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 440 | + url = _add_params_to_url(url, params) |
452 | 441 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
453 | 442 | downstream_headers = { |
454 | 443 | f"x-pd-proxy-{header}": value |
@@ -556,11 +545,7 @@ async def main() -> None: |
556 | 545 | asyncio.run(main()) |
557 | 546 | """ |
558 | 547 | if params: |
559 | | - parsed = urlparse(url) |
560 | | - existing_params = parse_qs(parsed.query) |
561 | | - existing_params.update(params) |
562 | | - new_query = urlencode(existing_params, doseq=True) |
563 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 548 | + url = _add_params_to_url(url, params) |
564 | 549 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
565 | 550 | downstream_headers = { |
566 | 551 | f"x-pd-proxy-{header}": value |
@@ -656,11 +641,7 @@ async def main() -> None: |
656 | 641 | asyncio.run(main()) |
657 | 642 | """ |
658 | 643 | if params: |
659 | | - parsed = urlparse(url) |
660 | | - existing_params = parse_qs(parsed.query) |
661 | | - existing_params.update(params) |
662 | | - new_query = urlencode(existing_params, doseq=True) |
663 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 644 | + url = _add_params_to_url(url, params) |
664 | 645 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
665 | 646 | downstream_headers = { |
666 | 647 | f"x-pd-proxy-{header}": value |
@@ -757,11 +738,7 @@ async def main() -> None: |
757 | 738 | asyncio.run(main()) |
758 | 739 | """ |
759 | 740 | if params: |
760 | | - parsed = urlparse(url) |
761 | | - existing_params = parse_qs(parsed.query) |
762 | | - existing_params.update(params) |
763 | | - new_query = urlencode(existing_params, doseq=True) |
764 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 741 | + url = _add_params_to_url(url, params) |
765 | 742 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
766 | 743 | downstream_headers = { |
767 | 744 | f"x-pd-proxy-{header}": value |
@@ -850,11 +827,7 @@ async def main() -> None: |
850 | 827 | asyncio.run(main()) |
851 | 828 | """ |
852 | 829 | if params: |
853 | | - parsed = urlparse(url) |
854 | | - existing_params = parse_qs(parsed.query) |
855 | | - existing_params.update(params) |
856 | | - new_query = urlencode(existing_params, doseq=True) |
857 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 830 | + url = _add_params_to_url(url, params) |
858 | 831 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
859 | 832 | downstream_headers = { |
860 | 833 | f"x-pd-proxy-{header}": value |
@@ -950,11 +923,7 @@ async def main() -> None: |
950 | 923 | asyncio.run(main()) |
951 | 924 | """ |
952 | 925 | if params: |
953 | | - parsed = urlparse(url) |
954 | | - existing_params = parse_qs(parsed.query) |
955 | | - existing_params.update(params) |
956 | | - new_query = urlencode(existing_params, doseq=True) |
957 | | - url = urlunparse(parsed._replace(query=new_query)) |
| 926 | + url = _add_params_to_url(url, params) |
958 | 927 | url_64 = base64.urlsafe_b64encode(url.encode()).decode() |
959 | 928 | downstream_headers = { |
960 | 929 | f"x-pd-proxy-{header}": value |
|
0 commit comments