'Build the actual URL to use.'

@property
def full_url(self):

    if (not self.url):
        raise URLRequired()
    url = self.url
    (scheme, netloc, path, params, query, fragment) = urlparse(url)
    if (not scheme):
        raise MissingSchema(('Invalid    URL    %r:    No    schema    supplied' % url))
    if (not (scheme in SCHEMAS)):
        raise InvalidSchema(('Invalid    scheme    %r' % scheme))
    try:
        netloc = netloc.encode('idna').decode('utf-8')
    except UnicodeError:
        raise InvalidURL('URL    has    an    invalid    label.')
    if (not path):
        path = '/'
    if is_py2:
        if isinstance(scheme, str):
            scheme = scheme.encode('utf-8')
        if isinstance(netloc, str):
            netloc = netloc.encode('utf-8')
        if isinstance(path, str):
            path = path.encode('utf-8')
        if isinstance(params, str):
            params = params.encode('utf-8')
        if isinstance(query, str):
            query = query.encode('utf-8')
        if isinstance(fragment, str):
            fragment = fragment.encode('utf-8')
    enc_params = self._encode_params(self.params)
    if enc_params:
        if query:
            query = ('%s&%s' % (query, enc_params))
        else:
            query = enc_params
    url = urlunparse([scheme, netloc, path, params, query, fragment])
    if self.config.get('encode_uri', True):
        url = requote_uri(url)
    return url
