'Convert self into a url
This function should more or less round-trip with :func:`.parse_url`. The
returned url may not be exactly the same as the url inputted to
:func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls
with a blank port will have : removed).
Example: ::
>>> U = parse_url(\'http://google.com/mail/\')
>>> U.url
\'http://google.com/mail/\'
>>> Url(\'http\', \'username:password\', \'host.com\', 80,
... \'/path\', \'query\', \'fragment\').url
\'http://username:password@host.com:80/path?query#fragment\''

@property
def url(self):

    (scheme, auth, host, port, path, query, fragment) = self
    url = ''
    if (scheme is not None):
        url += (scheme + '://')
    if (auth is not None):
        url += (auth + '@')
    if (host is not None):
        url += host
    if (port is not None):
        url += (':' + str(port))
    if (path is not None):
        url += path
    if (query is not None):
        url += ('?' + query)
    if (fragment is not None):
        url += ('#' + fragment)
    return url
