1
- from requests import Request , Session
1
+ from requests import Request , Session , hooks
2
2
3
3
from twilio .http import HttpClient
4
4
from twilio .http .response import Response
5
5
from twilio .http .request import Request as TwilioRequest
6
+ import logging
7
+ from twilio .compat import urlencode
8
+
9
+ _logger = logging .getLogger ('twilio.http_client' )
6
10
7
11
8
12
class TwilioHttpClient (HttpClient ):
9
13
"""
10
14
General purpose HTTP Client for interacting with the Twilio API
11
15
"""
12
- def __init__ (self , pool_connections = True ):
16
+ def __init__ (self , pool_connections = True , request_hooks = None ):
13
17
self .session = Session () if pool_connections else None
14
18
self .last_request = None
15
19
self .last_response = None
20
+ self .request_hooks = request_hooks or hooks .default_hooks ()
16
21
17
22
def request (self , method , url , params = None , data = None , headers = None , auth = None , timeout = None ,
18
23
allow_redirects = False ):
@@ -33,11 +38,28 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
33
38
:rtype: A :class:`Response <twilio.rest.http.response.Response>` object
34
39
"""
35
40
41
+ kwargs = {
42
+ 'method' : method .upper (),
43
+ 'url' : url ,
44
+ 'params' : params ,
45
+ 'data' : data ,
46
+ 'headers' : headers ,
47
+ 'auth' : auth ,
48
+ 'hooks' : self .request_hooks
49
+ }
50
+
51
+ if params :
52
+ _logger .info ('{method} Request: {url}?{query}' .format (query = urlencode (params ), ** kwargs ))
53
+ _logger .info ('PARAMS: {params}' .format (** kwargs ))
54
+ else :
55
+ _logger .info ('{method} Request: {url}' .format (** kwargs ))
56
+ if data :
57
+ _logger .info ('PAYLOAD: {data}' .format (** kwargs ))
58
+
36
59
self .last_response = None
37
60
session = self .session or Session ()
38
- request = Request (method .upper (), url , params = params , data = data , headers = headers , auth = auth )
39
- self .last_request = TwilioRequest (method .upper (), url , auth = auth , params = params , data = data ,
40
- headers = headers )
61
+ request = Request (** kwargs )
62
+ self .last_request = TwilioRequest (** kwargs )
41
63
42
64
prepped_request = session .prepare_request (request )
43
65
response = session .send (
@@ -46,6 +68,8 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
46
68
timeout = timeout ,
47
69
)
48
70
71
+ _logger .info ('{method} Response: {status} {text}' .format (method = method , status = response .status_code , text = response .text ))
72
+
49
73
self .last_response = Response (int (response .status_code ), response .text )
50
74
51
75
return self .last_response
0 commit comments