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

1from urllib.parse import ParseResult, parse_qsl, urlencode, urlparse, urlunparse 

2 

3 

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. 

7 

8 >> set_url_query_param('https://api.permit.io/opal/data/config', 'token', 'secret') 

9 'https://api.permit.io/opal/data/config?token=secret' 

10 

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) 

15 

16 query_params: dict = dict(parse_qsl(parsed_url.query)) 

17 query_params[param_name] = param_value 

18 new_query_string = urlencode(query_params) 

19 

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 )