from urllib.parse import urlparse
[docs]def parse_uri(uri):
"""Parse a URI and returns a dictionary from it
``scheme:[//authority]path[?query][#fragment]`` with ``authority = [userinfo@]host[:port]``
"""
parsed = urlparse(uri)
netloc = parsed.netloc
arguments = {
'scheme': parsed.scheme,
'path': parsed.path,
'query': parse_options(parsed.query),
'fragment': parsed.fragment,
'params': parsed.params
}
if netloc:
usr_pwd_add_port = netloc.split('@')
if len(usr_pwd_add_port) == 2:
usr_pwd = usr_pwd_add_port[0].split(':')
if len(usr_pwd) == 2:
arguments['password'] = usr_pwd[1]
arguments['username'] = usr_pwd[0]
add_port = usr_pwd_add_port[-1].split(':')
if len(add_port) == 2:
arguments['port'] = add_port[1]
arguments['address'] = add_port[0]
return arguments
[docs]def parse_options(options):
if not options:
return dict()
opt = dict()
for item in options.split('&'):
k, v = item.split('=')
opt[k] = v
return opt