(url)
return Url(scheme, auth, host, port, path, query, fragment)
Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
    performed to parse incomplete urls. Fields not provided will be None.

    Partly backwards-compatible with :mod:`urlparse`.

    Example::

        >>> parse_url('http://google.com/mail/')
        Url(scheme='http', host='google.com', port=None, path='/mail/', ...)
        >>> parse_url('google.com:80')
        Url(scheme=None, host='google.com', port=80, path=None, ...)
        >>> parse_url('/foo?bar')
        Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
    performed to parse incomplete urls. Fields not provided will be None.
Given a url return a parsed : class : . Url namedtuple . Best - effort is performed to parse incomplete urls . Fields not provided will be None .
def parse_url(url):
    """
    Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
    performed to parse incomplete urls. Fields not provided will be None.

    Partly backwards-compatible with :mod:`urlparse`.

    Example::

        >>> parse_url('http://google.com/mail/')
        Url(scheme='http', host='google.com', port=None, path='/mail/', ...)
        >>> parse_url('google.com:80')
        Url(scheme=None, host='google.com', port=80, path=None, ...)
        >>> parse_url('/foo?bar')
        Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
    """

    # While this code has overlap with stdlib's urlparse, it is much
    # simplified for our needs and less annoying.
    # Additionally, this implementations does silly things to be optimal
    # on CPython.

    if not url:
        # Empty
        return Url()

    scheme = None
    auth = None
    host = None
    port = None
    path = None
    fragment = None
    query = None

    # Scheme
    if '://' in url:
        scheme, url = url.split('://', 1)

    # Find the earliest Authority Terminator
    # (http://tools.ietf.org/html/rfc3986#section-3.2)
    url, path_, delim = split_first(url, ['/', '?', '#'])

    if delim:
        # Reassemble the path
        path = delim + path_

    # Auth
    if '@' in url:
        # Last '@' denotes end of auth part
        auth, url = url.rsplit('@', 1)

    # IPv6
    if url and url[0] == '[':
        host, url = url.split(']', 1)
        host += ']'

    # Port
    if ':' in url:
        _host, port = url.split(':', 1)

        if not host:
            host = _host

        if port:
            # If given, ports must be integers.
            if not port.isdigit():
                raise LocationParseError(url)
            port = int(port)
        else:
            # Blank ports are cool, too. (rfc3986#section-3.2.3)
            port = None

    elif not host and url:
        host = url

    if not path:
        return Url(scheme, auth, host, port, path, query, fragment)

    # Fragment
    if '#' in path:
        path, fragment = path.split('#', 1)

    # Query
    if '?' in path:
        path, query = path.split('?', 1)

    return Url(scheme, auth, host, port, path, query, fragment)
def parse_url ( url ) : # While this code has overlap with stdlib's urlparse, it is much # simplified for our needs and less annoying. # Additionally, this implementations does silly things to be optimal # on CPython. if not url : # Empty return Url ( ) scheme = None auth = None host = None port = None path = None fragment = None query = None # Scheme if '://' in url : scheme , url = url . split ( '://' , 1 ) # Find the earliest Authority Terminator # (http://tools.ietf.org/html/rfc3986#section-3.2) url , path_ , delim = split_first ( url , [ '/' , '?' , '#' ] ) if delim : # Reassemble the path path = delim + path_ # Auth if '@' in url : # Last '@' denotes end of auth part auth , url = url . rsplit ( '@' , 1 ) # IPv6 if url and url [ 0 ] == '[' : host , url = url . split ( ']' , 1 ) host += ']' # Port if ':' in url : _host , port = url . split ( ':' , 1 ) if not host : host = _host if port : # If given, ports must be integers. if not port . isdigit ( ) : raise LocationParseError ( url ) port = int ( port ) else : # Blank ports are cool, too. (rfc3986#section-3.2.3) port = None elif not host and url : host = url if not path : return Url ( scheme , auth , host , port , path , query , fragment ) # Fragment if '#' in path : path , fragment = path . split ( '#' , 1 ) # Query if '?' in path : path , query = path . split ( '?' , 1 ) return Url ( scheme , auth , host , port , path , query , fragment )