def reconstruct_url(self, path_info=None, query_string=None, relative=False):
        """
        Reconstructs the request URL using the algorithm provided by PEP3333
        """

        environ = self.environ
        if relative:
            url = ''
        else:
            url = environ['wsgi.url_scheme'] + '://'

            if environ.get('HTTP_HOST'):
                url += environ['HTTP_HOST']
            else:
                url += environ['SERVER_NAME']

                if environ['wsgi.url_scheme'] == 'https':
                    if environ['SERVER_PORT'] != '443':
                        url += ':' + environ['SERVER_PORT']
                else:
                    if environ['SERVER_PORT'] != '80':
                        url += ':' + environ['SERVER_PORT']

        url += quote(environ.get('SCRIPT_NAME', ''))
        if path_info is None:
            url += quote(environ.get('PATH_INFO', ''))
        else:
            url += path_info
        if query_string is None:
            if environ.get('QUERY_STRING'):
                url += '?' + environ['QUERY_STRING']
        else:
            if query_string:
                if isinstance(query_string, str):
                    url += '?' + query_string
                else:
                    url += '?' + encode_query_string(query_string)

        return url
def reconstruct_url ( self , path_info = None , query_string = None , relative = False ) : environ = self . environ if relative : url = '' else : url = environ [ 'wsgi.url_scheme' ] + '://' if environ . get ( 'HTTP_HOST' ) : url += environ [ 'HTTP_HOST' ] else : url += environ [ 'SERVER_NAME' ] if environ [ 'wsgi.url_scheme' ] == 'https' : if environ [ 'SERVER_PORT' ] != '443' : url += ':' + environ [ 'SERVER_PORT' ] else : if environ [ 'SERVER_PORT' ] != '80' : url += ':' + environ [ 'SERVER_PORT' ] url += quote ( environ . get ( 'SCRIPT_NAME' , '' ) ) if path_info is None : url += quote ( environ . get ( 'PATH_INFO' , '' ) ) else : url += path_info if query_string is None : if environ . get ( 'QUERY_STRING' ) : url += '?' + environ [ 'QUERY_STRING' ] else : if query_string : if isinstance ( query_string , str ) : url += '?' + query_string else : url += '?' + encode_query_string ( query_string ) return url
Reconstructs the request URL using the algorithm provided by PEP3333