in dusty/tools/url.py [0:0]
def parse_url(url):
""" Parses URL into parts """
parsed_url = re.search("".join([
r"^\s*((?P<protocol>.*?)\:\/\/)?",
r"((?P<username>.*?)(\:(?P<password>.*))?\@)?",
r"((?P<hostname>.*?)(\:((?P<port>[0-9]+)))?)(?P<path>/.*?)?",
r"(?P<query>\?.*?)?(?P<fragment>\#.*?)?\s*$"
]), url)
protocol = parsed_url.group("protocol")
hostname = parsed_url.group("hostname")
port = parsed_url.group("port")
path = parsed_url.group("path")
query = parsed_url.group("query")
fragment = parsed_url.group("fragment")
username = parsed_url.group("username")
password = parsed_url.group("password")
# Prepare result object
result = namedtuple("URL", [
"protocol", "hostname", "port",
"path", "query", "fragment",
"username", "password", "raw"
])
return result(
protocol=protocol if protocol is not None else "",
hostname=hostname if hostname is not None else "",
port=port if port is not None else "",
path=path if path is not None else "/",
query=query[1:] if query is not None else "",
fragment=fragment[1:] if fragment is not None else "",
username=username if username is not None else "",
password=password if password is not None else "",
raw=url
)