(uri)
return ''.join(parts)
Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
Un - escape any percent - escape sequences in a URI that are unreserved characters . This leaves all reserved illegal and non - ASCII bytes encoded .
def unquote_unreserved(uri):
    """Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
    """
    parts = uri.split('%')
    for i in range(1, len(parts)):
        h = parts[i][0:2]
        if len(h) == 2 and h.isalnum():
            try:
                c = chr(int(h, 16))
            except ValueError:
                raise InvalidURL("Invalid percent-escape sequence: '%s'" % h)

            if c in UNRESERVED_SET:
                parts[i] = c + parts[i][2:]
            else:
                parts[i] = '%' + parts[i]
        else:
            parts[i] = '%' + parts[i]
    return ''.join(parts)
def unquote_unreserved ( uri ) : parts = uri . split ( '%' ) for i in range ( 1 , len ( parts ) ) : h = parts [ i ] [ 0 : 2 ] if len ( h ) == 2 and h . isalnum ( ) : try : c = chr ( int ( h , 16 ) ) except ValueError : raise InvalidURL ( "Invalid percent-escape sequence: '%s'" % h ) if c in UNRESERVED_SET : parts [ i ] = c + parts [ i ] [ 2 : ] else : parts [ i ] = '%' + parts [ i ] else : parts [ i ] = '%' + parts [ i ] return '' . join ( parts )