def urlunsplit(components):
    """Combine the elements of a tuple as returned by urlsplit() into a
    complete URL as a string. The data argument can be any five-item iterable.
    This may result in a slightly different, but equivalent URL, if the URL that
    was parsed originally had unnecessary delimiters (for example, a ? with an
    empty query; the RFC states that these are equivalent)."""
    scheme, netloc, url, query, fragment, _coerce_result = (
                                          _coerce_args(*components))
    if netloc or (scheme and scheme in uses_netloc and url[:2] != '//'):
        if url and url[:1] != '/': url = '/' + url
        url = '//' + (netloc or '') + url
    if scheme:
        url = scheme + ':' + url
    if query:
        url = url + '?' + query
    if fragment:
        url = url + '#' + fragment
    return _coerce_result(url)
def urlunsplit ( components ) : scheme , netloc , url , query , fragment , _coerce_result = ( _coerce_args ( * components ) ) if netloc or ( scheme and scheme in uses_netloc and url [ : 2 ] != '//' ) : if url and url [ : 1 ] != '/' : url = '/' + url url = '//' + ( netloc or '' ) + url if scheme : url = scheme + ':' + url if query : url = url + '?' + query if fragment : url = url + '#' + fragment return _coerce_result ( url )
Combine the elements of a tuple as returned by urlsplit() into a
    complete URL as a string. The data argument can be any five-item iterable.
    This may result in a slightly different, but equivalent URL, if the URL that
    was parsed originally had unnecessary delimiters (for example, a ? with an
    empty query; the RFC states that these are equivalent).