def parse_url()

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
    )