8000 add request logging and hooking (#385) · thecodeflash/twilio-python@31bf309 · GitHub
[go: up one dir, main page]

Skip to content

Commit 31bf309

Browse files
tysonholubcodejudas
authored andcommitted
add request logging and hooking (twilio#385)
* add request logging and hooking * change urlencode to import from twilio.compat * refactor rebase for PR#385
1 parent 9f3a32f commit 31bf309

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

twilio/http/http_client.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
1-
from requests import Request, Session
1+
from requests import Request, Session, hooks
22

33
from twilio.http import HttpClient
44
from twilio.http.response import Response
55
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')
610

711

812
class TwilioHttpClient(HttpClient):
913
"""
1014
General purpose HTTP Client for interacting with the Twilio API
1115
"""
12-
def __init__(self, pool_connections=True):
16+
def __init__(self, pool_connections=True, request_hooks=None):
1317
self.session = Session() if pool_connections else None
1418
self.last_request = None
1519
self.last_response = None
20+
self.request_hooks = request_hooks or hooks.default_hooks()
1621

1722
def request(self, method, url, params=None, data=None, headers=None, auth=None, timeout=None,
1823
allow_redirects=False):
@@ -33,11 +38,28 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
3338
:rtype: A :class:`Response <twilio.rest.http.response.Response>` object
3439
"""
3540

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+
3659
self.last_response = None
3760
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)
4163

4264
prepped_request = session.prepare_request(request)
4365
response = session.send(
@@ -46,6 +68,8 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
4668
timeout=timeout,
4769
)
4870

71+
_logger.info('{method} Response: {status} {text}'.format(method=method, status=response.status_code, text=response.text))
72+
4973
self.last_response = Response(int(response.status_code), response.text)
5074

5175
return self.last_response

twilio/http/request.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ def __init__(self,
1313
auth=ANY,
1414
params=ANY,
1515
data=ANY,
16-
headers=ANY):
16+
headers=ANY,
17+
**kwargs):
1718
self.method = method.upper()
1819
self.url = url
1920
self.auth = auth

twilio/rest/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Client(object):
1818
""" A client for accessing the Twilio API. """
1919

2020
def __init__(self, username=None, password=None, account_sid=None, region=None,
21-
http_client=None, environment=None):
21+
http_client=None, environment=None, request_hooks=None):
2222
"""
2323
Initializes the Twilio Client
2424
@@ -48,7 +48,7 @@ def __init__(self, username=None, password=None, account_sid=None, region=None,
4848

4949
self.auth = (self.username, self.password)
5050
""" :type : tuple(str, str) """
51-
self.http_client = http_client or TwilioHttpClient()
51+
self.http_client = http_client or TwilioHttpClient(request_hooks=request_hooks)
5252
""" :type : HttpClient """
5353

5454
# Domains

0 commit comments

Comments
 (0)
0