code: def _generate_auth_url(self, path, params, accepts_clientid):
          
          # Deterministic ordering through sorting by key.
          # Useful for tests, and in the future, any caching.
          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[:] # Take a copy.
  
          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.")
docs: 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