You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
2.0 KiB
Python
46 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
# based on myurlparse.py by alexwlchan
|
|
# taken from: https://gist.github.com/alexwlchan/1956efe1acb1f2947cbd575651a3d529
|
|
# see also: https://alexwlchan.net/2016/08/dealing-with-query-strings/
|
|
|
|
try: # Python 3+
|
|
from urllib.parse import ( parse_qs, parse_qsl, urlencode, urlparse, urlunparse )
|
|
except ImportError: # Python 2
|
|
from urllib import urlencode
|
|
from urlparse import parse_qs, parse_qsl, urlparse, urlunparse
|
|
|
|
def get_query_fields( url ):
|
|
return dict( parse_qs( urlparse( url ).query ) )
|
|
|
|
def set_query_fields( url, querydict ):
|
|
components = urlparse( url )
|
|
old_query = parse_qsl( urlparse( url ).query )
|
|
new_query = []
|
|
for ( k, vs ) in querydict.items():
|
|
for v in vs:
|
|
new_query.append( ( k, v ) )
|
|
for ( k, v ) in old_query:
|
|
if k not in querydict:
|
|
new_query.append( ( k, v ) )
|
|
components = ( components.scheme,
|
|
components.netloc,
|
|
components.path,
|
|
components.params,
|
|
urlencode( new_query ),
|
|
components.fragment
|
|
)
|
|
return urlunparse( components )
|
|
|
|
def set_url_components( url, scheme = None, netloc = None, path = None, params = None, query = None, fragment = None ):
|
|
components = urlparse( url )
|
|
components = ( callable( scheme ) and scheme( components.scheme ) or scheme or components.scheme,
|
|
callable( netloc ) and netloc( components.netloc ) or netloc or components.netloc,
|
|
callable( path ) and path( components.path ) or path or components.path,
|
|
callable( params ) and params( components.params ) or params or components.params,
|
|
callable( query ) and query( components.query ) or query or components.query,
|
|
callable( fragment ) and fragment( components.fragment ) or fragment or components.fragment,
|
|
)
|
|
return urlunparse( components )
|