From: Kenneth Reitz Date: Mon, 14 Feb 2011 03:50:45 +0000 (-0500) Subject: Much better exception handling X-Git-Tag: v0.2.0~36 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f566bb21400cecf4dfe5a6c7d9bc7fb62abbb57d;p=services%2Fpython-requests.git Much better exception handling --- diff --git a/requests/core.py b/requests/core.py index f33003f..0fa5fd1 100644 --- a/requests/core.py +++ b/requests/core.py @@ -66,9 +66,12 @@ class Request(object): def _checks(self): - pass + """Deterministic checks for consistiency.""" - + if not self.url: + raise URLRequired + + def _get_opener(self): """ Creates appropriate opener object for urllib2. """ @@ -94,81 +97,79 @@ class Request(object): :param anyway: If True, request will be sent, even if it has already been sent. """ self._checks() + + success = False if self.method in ('GET', 'HEAD', 'DELETE'): if (not self.sent) or anyway: - try: - # url encode GET params if it's a dict - if isinstance(self.params, dict): - params = urllib.urlencode(self.params) - else: - params = self.params + # url encode GET params if it's a dict + if isinstance(self.params, dict): + params = urllib.urlencode(self.params) + else: - req = _Request(("%s?%s" % (self.url, params)), method=self.method) + params = self.params - if self.headers: - req.headers = self.headers + req = _Request(("%s?%s" % (self.url, params)), method=self.method) - opener = self._get_opener() - resp = opener(req) + if self.headers: + req.headers = self.headers + opener = self._get_opener() + + try: + resp = opener(req) self.response.status_code = resp.code self.response.headers = resp.info().dict if self.method.lower() == 'get': self.response.content = resp.read() success = True + except urllib2.HTTPError, why: + self.response.status_code = why.code - except RequestException: - raise RequestException - elif self.method == 'PUT': if (not self.sent) or anyway: - try: - try: + req = _Request(self.url, method='PUT') - req = _Request(self.url, method='PUT') + if self.headers: + req.headers = self.headers - if self.headers: - req.headers = self.headers + req.data = self.data + + try: + opener = self._get_opener() + resp = opener(req) - req.data = self.data + self.response.status_code = resp.code + self.response.headers = resp.info().dict + self.response.content = resp.read() - opener = self._get_opener() - resp = opener(req) + success = True - self.response.status_code = resp.code - self.response.headers = resp.info().dict - self.response.content = resp.read() + except urllib2.HTTPError, why: + self.response.status_code = why.code - success = True - except urllib2.HTTPError: - self.resonse.status_code = 405 - except Exception: - # TODO: Fix this shit - raise RequestException - elif self.method == 'POST': if (not self.sent) or anyway: - try: - req = _Request(self.url, method='POST') + req = _Request(self.url, method='POST') - if self.headers: - req.headers = self.headers + if self.headers: + req.headers = self.headers - # url encode form data if it's a dict - if isinstance(self.data, dict): - req.data = urllib.urlencode(self.data) - else: - req.data = self.data + # url encode form data if it's a dict + if isinstance(self.data, dict): + req.data = urllib.urlencode(self.data) + else: + req.data = self.data + try: opener = self._get_opener() resp = opener(req) @@ -176,11 +177,11 @@ class Request(object): self.response.status_code = resp.code self.response.headers = resp.info().dict self.response.content = resp.read() - + success = True - except Exception: - raise RequestException + except urllib2.HTTPError, why: + self.response.status_code = why.code self.sent = True if success else False @@ -191,12 +192,12 @@ class Request(object): class Response(object): """The :class:`Request` object. It's awesome. """ - + def __init__(self): self.content = None self.status_code = None self.headers = dict() - + class AuthObject(object): """The :class:`AuthObject` is a simple HTTP Authentication token.