Coverage for jutil/urls.py: 88%
13 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-07 16:40 -0500
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-07 16:40 -0500
1import logging
2from urllib.parse import urlparse, parse_qsl, urlunparse, urlencode
4logger = logging.getLogger(__name__)
7def modify_url(url: str, new_params: dict) -> str:
8 """
9 Modifies existing URL by setting/overriding specified query string parameters.
10 This can be useful for example if you need to modify user-provided callback URL
11 for extra arguments. Note: Does not support multiple querystring parameters with identical name.
12 :param url: Base URL/path to modify
13 :param new_params: Querystring parameters to set/override (dict)
14 :return: New URL/path
15 """
16 res = urlparse(url)
17 query_params = dict(parse_qsl(res.query))
18 for k, v in new_params.items():
19 if v is None: 19 ↛ 20line 19 didn't jump to line 20, because the condition on line 19 was never true
20 query_params[str(k)] = ""
21 else:
22 query_params[str(k)] = str(v)
23 parts = list(res)
24 parts[4] = urlencode(query_params)
25 return urlunparse(parts)