1
- from requests import Request , Session
1
+ from requests import Request , Session , hooks
2
2
3
3
from twilio .http import HttpClient , get_cert_file
4
4
from twilio .http .response import Response
<
10000
/code>
5
+ import logging
6
+ import json
7
+ try :
8
+ from urllib .parse import urlencode
9
+ except ImportError :
10
+ from urllib import urlencode
11
+
12
+ _logger = logging .getLogger ('twilio.http_client' )
5
13
6
14
7
15
class TwilioHttpClient (HttpClient ):
8
16
"""
9
17
General purpose HTTP Client for interacting with the Twilio API
10
18
"""
11
- def __init__ (self , connection_pool = True ):
19
+ def __init__ (self , connection_pool = True , request_hooks = None ):
12
20
if connection_pool :
13
21
self .session = Session ()
14
22
self .session .verify = get_cert_file ()
15
- else :
23
+ else :
16
24
self .session = None
17
-
25
+
26
+ self .request_hooks = request_hooks or hooks .default_hooks ()
27
+
18
28
def request (self , method , url , params = None , data = None , headers = None , auth = None , timeout = None ,
19
29
allow_redirects = False ):
20
30
"""
@@ -38,7 +48,25 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
38
48
session = Session ()
39
49
session .verify = get_cert_file ()
40
50
41
- request = Request (method .upper (), url , params = params , data = data , headers = headers , auth = auth )
51
+ kwargs = dict (
52
+ method = method .upper (),
53
+ url = url ,
54
+ params = params ,
55
+ data = data ,
56
+ headers = headers ,
57
+ auth = auth ,
58
+ hooks = self .request_hooks
59
+ )
60
+
61
+ if params :
62
+ _logger .info ('{method} Request: {url}?{query}' .format (query = urlencode (params ), ** kwargs ))
63
+ _logger .info ('PARAMS: {params}' .format (** kwargs ))
64
+ else :
65
+ _logger .info ('{method} Request: {url}' .format (** kwargs ))
66
+ if data :
67
+ _logger .info ('PAYLOAD: {data}' .format (** kwargs ))
68
+
69
+ request = Request (** kwargs )
42
70
43
71
prepped_request = session .prepare_request (request )
44
72
response = session .send (
@@ -47,4 +75,12 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
47
75
timeout = timeout ,
48
76
)
49
77
78
+ if hasattr (response , 'json' ):
79
+ # strip JSON of possible prettyprint
80
+ text = json .dumps (response .json ())
81
+ else :
82
+ text = response .text
83
+
84
+ _logger .info ('{method} Response: {status} {text}' .format (method = method , status = response .status_code , text = text ))
85
+
50
86
return Response (int (response .status_code ), response .text )
0 commit comments