Coverage for /usr/local/lib/python3.10/site-packages/opal_common-0.0.0-py3.10.egg/opal_common/urls.py: 29%
7 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 11:54 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 11:54 +0000
1from urllib.parse import ParseResult, parse_qsl, urlencode, urlparse, urlunparse
4def set_url_query_param(url: str, param_name: str, param_value: str):
5 """Given a url, set or replace a query parameter and return the modified
6 url.
8 >> set_url_query_param('https://api.permit.io/opal/data/config', 'token', 'secret')
9 'https://api.permit.io/opal/data/config?token=secret'
11 >> set_url_query_param('https://api.permit.io/opal/data/config?some=var', 'token', 'secret')
12 'https://api.permit.io/opal/data/config?some=var&token=secret'
13 """
14 parsed_url: ParseResult = urlparse(url)
16 query_params: dict = dict(parse_qsl(parsed_url.query))
17 query_params[param_name] = param_value
18 new_query_string = urlencode(query_params)
20 return urlunparse(
21 (
22 parsed_url.scheme,
23 parsed_url.netloc,
24 parsed_url.path,
25 parsed_url.params,
26 new_query_string,
27 parsed_url.fragment,
28 )
29 )