def request(self, method, path=None, payload=None, headers=None, params_dict=None, **params): """ HTTP request This method may be the only one you want to override when subclassing `restkit.rest.Resource`. :param payload: string or File object passed to the body of the request :param path: string additionnal path to the uri :param headers: dict, optionnal headers that will be added to HTTP request. :params_dict: Options parameters added to the request as a dict :param params: Optionnal parameterss added to the request """ params = params or {} params.update(params_dict or {}) while True: uri = util.make_uri(self.uri, path, charset=self.charset, safe=self.safe, encode_keys=self.encode_keys, **self.make_params(params)) # make request http = HttpRequest(**self.client_opts) resp = http.request(uri, method=method, body=payload, headers=self.make_headers(headers)) if resp is None: # race condition raise ValueError("Unkown error: response object is None") if resp.status_int >= 400: if resp.status_int == 404: raise ResourceNotFound(resp.body_string(), response=resp) elif resp.status_int in (401, 403): if self.unauthorized(resp): raise Unauthorized(resp.body_string(), http_code=resp.status_int, response=resp) else: raise RequestFailed(resp.body_string(), http_code=resp.status_int, response=resp) else: break return resp
def request(url, method='GET', body=None, headers=None, timeout=_GLOBAL_DEFAULT_TIMEOUT, filters=None, follow_redirect=False, force_follow_redirect=False, max_follow_redirect=MAX_FOLLOW_REDIRECTS, decompress=True, pool_instance=None, response_class=None, **ssl_args): """ Quick shortcut method to pass a request :param url: str, url string :param method: str, by default GET. http verbs :param body: the body, could be a string, an iterator or a file-like object :param headers: dict or list of tupple, http headers :pool intance: instance inherited from `restkit.pool.PoolInterface`. It allows you to share and reuse connections connections. :param follow_redirect: boolean, by default is false. If true, if the HTTP status is 301, 302 or 303 the client will follow the location. :param filters: list, list of http filters. see the doc of http filters for more info :param ssl_args: ssl arguments. See http://docs.python.org/library/ssl.html for more information. """ # detect credentials from url u = urlparse.urlparse(url) if u.username is not None: password = u.password or "" filters = filters or [] url = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1], u.path, u.params, u.query, u.fragment)) filters.append(BasicAuth(u.username, password)) http_client = HttpRequest(timeout=timeout, filters=filters, follow_redirect=follow_redirect, force_follow_redirect=force_follow_redirect, max_follow_redirect=max_follow_redirect, decompress=decompress, pool_instance=pool_instance, response_class=response_class, **ssl_args) return http_client.request(url, method=method, body=body, headers=headers)
def request(url, method='GET', body=None, headers=None, timeout=_GLOBAL_DEFAULT_TIMEOUT, filters=None, follow_redirect=False, force_follow_redirect=False, max_follow_redirect=MAX_FOLLOW_REDIRECTS, decompress=True, pool_instance=None, response_class=None, **ssl_args): """ Quick shortcut method to pass a request :param url: str, url string :param method: str, by default GET. http verbs :param body: the body, could be a string, an iterator or a file-like object :param headers: dict or list of tupple, http headers :pool intance: instance inherited from `restkit.pool.PoolInterface`. It allows you to share and reuse connections connections. :param follow_redirect: boolean, by default is false. If true, if the HTTP status is 301, 302 or 303 the client will follow the location. :param filters: list, list of http filters. see the doc of http filters for more info :param ssl_args: ssl arguments. See http://docs.python.org/library/ssl.html for more information. """ # detect credentials from url u = urlparse.urlparse(url) if u.username is not None: password = u.password or "" filters = filters or [] url = urlparse.urlunparse((u.scheme, u.netloc.split("@")[-1], u.path, u.params, u.query, u.fragment)) filters.append(BasicAuth(u.username, password)) http_client = HttpRequest( timeout=timeout, filters=filters, follow_redirect=follow_redirect, force_follow_redirect=force_follow_redirect, max_follow_redirect=max_follow_redirect, decompress=decompress, pool_instance=pool_instance, response_class=response_class, **ssl_args) return http_client.request(url, method=method, body=body, headers=headers)