'Returns the path and query string portion of the request URL, first
adding any necessary parameters.
:param path: The path portion of the URL.
:type path: string
:param params: URL parameters.
:type params: dict or list of key/value tuples
:rtype: string'

def _generate_auth_url(self, path, params, accepts_clientid):

    extra_params = (getattr(self, '_extra_params', None) or {})
    if (type(params) is dict):
        params = sorted(dict(extra_params, **params).items())
    else:
        params = (sorted(extra_params.items()) + params[:])
    if (accepts_clientid and self.client_id and self.client_secret):
        if self.channel:
            params.append(('channel', self.channel))
        params.append(('client', self.client_id))
        path = '?'.join([path, urlencode_params(params)])
        sig = sign_hmac(self.client_secret, path)
        return ((path + '&signature=') + sig)
    if self.key:
        params.append(('key', self.key))
        return ((path + '?') + urlencode_params(params))
    raise ValueError('Must    provide    API    key    for    this    API.    It    does    not    accept    enterprise    credentials.')
