Parses out the information for this url, returning its components
    expanded out to Python objects.
    
    :param      url | <str>
    
    :return     (<str> path, <dict> query, <str> fragment)

def parse(url):
    """
    Parses out the information for this url, returning its components
    expanded out to Python objects.
    
    :param      url | <str>
    
    :return     (<str> path, <dict> query, <str> fragment)
    """
    result = urlparse.urlparse(nstr(url))

    path = result.scheme + '://' + result.netloc
    if result.path:
        path += result.path

    query = {}

    # extract the python information from the query
    if result.query:
        url_query = urlparse.parse_qs(result.query)
        for key, value in url_query.items():
            if type(value) == list and len(value) == 1:
                value = value[0]

            query[key] = value

    return path, query, result.fragment