-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathrequest.py
More file actions
36 lines (26 loc) · 991 Bytes
/
request.py
File metadata and controls
36 lines (26 loc) · 991 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# coding=utf-8
import types
import re
import requests
from .jsonDict import JsonDict, loads
from .exceptions import ApiResponseError
def json_dict(self):
try:
return self.json(object_hook=lambda pairs: JsonDict(pairs.iteritems()))
except ValueError, e:
try:
self.raise_for_status()
except requests.RequestException, e:
raise ApiResponseError(self, message=u'%s, response: %s' % (e, self.text))
else:
raise ApiResponseError(self, e.__class__.__name__, u'%s, value: %s' % (e, self.text))
def jsonp_dict(self):
return loads(re.search(r'(\{.*\})', self.text).group(1))
def add_method(response, *args, **kwargs):
response.json_dict = types.MethodType(json_dict, response)
response.jsonp_dict = types.MethodType(jsonp_dict, response)
return response
class Request(object):
def __init__(self):
self._session = requests.session()
self._session.hooks = dict(response=add_method)