Skip to content

Commit 40e9458

Browse files
authored
feat: add API logging to client (#123)
1 parent aef38bc commit 40e9458

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

USAGE.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,25 @@ HTTP request to delete elements in a source.
9595
```python
9696
response = client.api_keys._(api_keys_id).delete()
9797
# print(response) as shown above
98-
```
98+
```
99+
100+
## LOGGING
101+
Logging namespace `python_http_client.client` is available on API Client.
102+
103+
Example to stdout:
104+
105+
```
106+
>>> import logging
107+
>>> import sys
108+
>>> logger = logging.getLogger('python_http_client.client')
109+
>>> logger.setLevel(logging.DEBUG)
110+
>>> handler = logging.StreamHandler(sys.stdout)
111+
>>> handler.setLevel(logging.DEBUG)
112+
>>> formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
113+
>>> handler.setFormatter(formatter)
114+
>>> logger.addHandler(handler)
115+
>>> client.templates.get()
116+
2019-03-08 17:21:25,329 - python_http_client.client - DEBUG - GET Request: https://api.sendgrid.com/v3/templates
117+
2019-03-08 17:21:25,329 - python_http_client.client - DEBUG - HEADERS: {'Authorization': 'Bearer redacted_token', 'Accept': 'application/json', 'User-agent': 'sendgrid/5.6.0;python'}
118+
2019-03-08 17:21:25,696 - python_http_client.client - DEBUG - GET Response: 200 {"templates":[]}
119+
```

python_http_client/client.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""HTTP Client library"""
22
import json
3-
3+
import logging
44
from .exceptions import handle_error
55

66
try:
@@ -14,6 +14,8 @@
1414
from urllib2 import HTTPError
1515
from urllib import urlencode
1616

17+
_logger = logging.getLogger(__name__)
18+
1719

1820
class Response(object):
1921
"""Holds the response from an API call."""
@@ -173,6 +175,10 @@ def _make_request(self, opener, request, timeout=None):
173175
try:
174176
return opener.open(request, timeout=timeout)
175177
except HTTPError as err:
178+
_logger.debug('{method} Response: {status} {body}'.format(
179+
method=request.get_method(),
180+
status=exc.status_code,
181+
body=exc.body))
176182
exc = handle_error(err)
177183
exc.__cause__ = None
178184
raise exc
@@ -258,9 +264,26 @@ def http_request(
258264
)
259265
request.get_method = lambda: method
260266

261-
return Response(
267+
_logger.debug('{method} Request: {url}'.format(
268+
method=method,
269+
url=request.get_full_url()))
270+
if request.data:
271+
_logger.debug('PAYLOAD: {data}'.format(
272+
data=request.data))
273+
_logger.debug('HEADERS: {headers}'.format(
274+
headers=request.headers))
275+
276+
response = Response(
262277
self._make_request(opener, request, timeout=timeout)
263278
)
279+
280+
_logger.debug('{method} Response: {status} {body}'.format(
281+
method=method,
282+
status=response.status_code,
283+
body=response.body))
284+
285+
return response
286+
264287
return http_request
265288
else:
266289
# Add a segment to the URL

0 commit comments

Comments
 (0)