def _checks(self):
- pass
+ """Deterministic checks for consistiency."""
-
+ if not self.url:
+ raise URLRequired
+
+
def _get_opener(self):
""" Creates appropriate opener object for urllib2.
"""
: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)
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
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.