From b75872866c20f198663c73f7896f2debbe7936ac Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Fri, 6 Apr 2018 17:57:50 +0200 Subject: [PATCH] Util function to manipulate url params --- api/funkwhale_api/common/utils.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/api/funkwhale_api/common/utils.py b/api/funkwhale_api/common/utils.py index c9d450e6..2d7641bf 100644 --- a/api/funkwhale_api/common/utils.py +++ b/api/funkwhale_api/common/utils.py @@ -1,3 +1,4 @@ +from urllib.parse import urlencode, parse_qs, urlsplit, urlunsplit import os import shutil @@ -25,3 +26,20 @@ def on_commit(f, *args, **kwargs): return transaction.on_commit( lambda: f(*args, **kwargs) ) + + +def set_query_parameter(url, **kwargs): + """Given a URL, set or replace a query parameter and return the + modified URL. + + >>> set_query_parameter('http://example.com?foo=bar&biz=baz', 'foo', 'stuff') + 'http://example.com?foo=stuff&biz=baz' + """ + scheme, netloc, path, query_string, fragment = urlsplit(url) + query_params = parse_qs(query_string) + + for param_name, param_value in kwargs.items(): + query_params[param_name] = [param_value] + new_query_string = urlencode(query_params, doseq=True) + + return urlunsplit((scheme, netloc, path, new_query_string, fragment)) -- GitLab