def _request(self, method, data=None, params=None): s = self.get_serializer() url = self._store["base_url"] if self._store["append_slash"] and not url.endswith("/"): url = url + "/" resp = self._store["session"].request(method, url, data=data, params=params, headers={ "content-type": s.get_content_type(), "accept": s.get_content_type() }) if 400 <= resp.status_code <= 499: raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) elif 500 <= resp.status_code <= 599: raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) return resp
def _request(self, method, data=None, files=None, params=None): s = self._store["serializer"] url = self._store["base_url"] if self._store["append_slash"] and not url.endswith("/"): url = url + "/" headers = {"accept": s.get_content_type()} if not files: headers["content-type"] = s.get_content_type() if data is not None: data = s.dumps(data) resp = self._store["session"].request(method, url, data=data, params=params, files=files, headers=headers) if 400 <= resp.status_code <= 499: raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) elif 500 <= resp.status_code <= 599: raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) self._ = resp return resp
def test_bango_portal_redirect_api_error(self, api): message = 'Something went wrong.' error = {'__all__': [message]} api.bango.login.post.side_effect = exceptions.HttpClientError( content=error) res = self.client.get(self.portal_url, follow=True) eq_(res.redirect_chain, [('http://testserver/lookup/', 302)]) ok_(message in [msg.message for msg in res.context['messages']][0])
def _request(self, method, data=None, params=None, headers=None): """ Overwrite so we can pass through custom headers, like oauth or something useful. """ s = self._store["serializer"] url = self._store["base_url"] if self._store["append_slash"] and not url.endswith("/"): url = url + "/" hdrs = { "accept": s.get_content_type(), "content-type": s.get_content_type() } hdrs.update(headers or {}) for callback in self._store.get('callbacks', []): callback['method'](self, data=data, extra=callback.get('extra'), headers=hdrs, method=method, params=params, url=url) stats_key = _key(url, method) with statsd.timer(stats_key): try: resp = self._call_request(method, url, data, params, hdrs) except ConnectionError: raise exceptions.HttpServerError('Connection Error') statsd.incr('%s.%s' % (stats_key, resp.status_code)) if 400 <= resp.status_code <= 499: raise exceptions.HttpClientError( "Client Error %s: %s" % (resp.status_code, url), response=resp, content=self._try_to_serialize_error(resp)) elif 500 <= resp.status_code <= 599: raise exceptions.HttpServerError( "Server Error %s: %s" % (resp.status_code, url), response=resp, content=self._try_to_serialize_error(resp)) self._ = resp return resp
def _request(self, method, data=None, params=None, files=None): s = self.get_serializer() url = self._store["base_url"] if self._store["append_slash"] and not url.endswith("/"): url = url + "/" headers = {'accept': s.get_content_type()} print 'data:' print data print 'params:' print params print 'files:' print files if not files: # files imply a content-type of multipart/form-data headers['content-type'] = s.get_content_type() resp = self._store["session"].request(method, url, data=data, params=params, files=files, headers=headers) if 400 <= resp.status_code <= 499: raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) elif 500 <= resp.status_code <= 599: print resp print resp.content raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) return resp
def _request(self, method, **kwargs): s = self.get_serializer() url = self._meta.base_url if self._meta.append_slash and not url.endswith("/"): url = url + "/" if "body" in kwargs: body = kwargs.pop("body") else: body = None if kwargs: url = "?".join([url, urllib.urlencode(kwargs)]) resp, content = self._http.request(url, method, body=body, headers={"content-type": s.get_content_type()}) if 400 <= resp.status <= 499: raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status, url), response=resp, content=content) elif 500 <= resp.status <= 599: raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status, url), response=resp, content=content) return resp, content
stats_key = _key(url, method) with statsd.timer(stats_key): try: resp = self._call_request(method, url, data, params, hdrs) except ConnectionError, err: # In the case of connection errors, there isn't a response # so let's explicitly set up to None. raise exceptions.HttpServerError('Connection Error', response=None, content=None) statsd.incr('%s.%s' % (stats_key, resp.status_code)) if 400 <= resp.status_code <= 499: raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status_code, url), response=resp, content=self._try_to_serialize_error(resp)) elif 500 <= resp.status_code <= 599: raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status_code, url), response=resp, content=self._try_to_serialize_error(resp)) self._ = resp return resp def _try_to_serialize_error(self, response): try: return self._try_to_serialize_response(response) except ValueError: return response