Skip to content

Commit e1c8695

Browse files
author
childish-sambino
authored
fix: update request exception logging and update tests (#145)
1 parent 57ed611 commit e1c8695

File tree

2 files changed

+37
-37
lines changed

2 files changed

+37
-37
lines changed

python_http_client/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,12 @@ def _make_request(self, opener, request, timeout=None):
175175
try:
176176
return opener.open(request, timeout=timeout)
177177
except HTTPError as err:
178+
exc = handle_error(err)
179+
exc.__cause__ = None
178180
_logger.debug('{method} Response: {status} {body}'.format(
179181
method=request.get_method(),
180182
status=exc.status_code,
181183
body=exc.body))
182-
exc = handle_error(err)
183-
exc.__cause__ = None
184184
raise exc
185185

186186
def _(self, name):

tests/test_unit.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
import pickle
22
import unittest
33

4-
from python_http_client.client import Client
4+
from python_http_client.client import Client, HTTPError, urllib
55
from python_http_client.exceptions import (
6-
BadRequestsError, HTTPError,
6+
HTTPError as SG_HTTPError,
7+
BadRequestsError,
78
NotFoundError,
89
ServiceUnavailableError,
910
UnsupportedMediaTypeError,
10-
handle_error
1111
)
1212

1313
try:
1414
# Python 3
15-
import urllib.request as urllib
1615
from unittest import mock
1716
except ImportError:
1817
# Python 2
19-
import urllib2 as urllib
2018
import mock
2119

2220
try:
@@ -27,10 +25,10 @@
2725

2826
class MockException(HTTPError):
2927

30-
def __init__(self, code):
31-
self.code = code
32-
self.reason = 'REASON'
33-
self.hdrs = 'HEADERS'
28+
def __init__(self, url, response_code):
29+
super(MockException, self).__init__(
30+
url, response_code, 'REASON', 'HEADERS', None
31+
)
3432

3533
def read(self):
3634
return 'BODY'
@@ -51,17 +49,16 @@ def read(self):
5149
return 'RESPONSE BODY'
5250

5351

54-
class MockClient(Client):
52+
class MockOpener:
5553

56-
def __init__(self, host, response_code, timeout=None):
54+
def __init__(self):
5755
self.response_code = 200
58-
Client.__init__(self, host)
5956

60-
def _make_request(self, opener, request, timeout=None):
57+
def open(self, request, timeout=None):
6158
if 200 <= self.response_code < 299: # if successful code
6259
return MockResponse(self.response_code)
6360
else:
64-
raise handle_error(MockException(self.response_code))
61+
raise MockException(request.get_full_url(), self.response_code)
6562

6663

6764
class TestClient(unittest.TestCase):
@@ -150,9 +147,12 @@ def test__(self):
150147
url_path = ['hello']
151148
self.assertEqual(client._url_path[0], url_path[0])
152149

153-
def test__getattr__(self):
154-
mock_client = MockClient(self.host, 200)
155-
client = mock_client.__getattr__('hello')
150+
@mock.patch('python_http_client.client.urllib')
151+
def test__getattr__(self, mock_lib):
152+
mock_opener = MockOpener()
153+
mock_lib.build_opener.return_value = mock_opener
154+
155+
client = self.client.__getattr__('hello')
156156
url_path = ['hello']
157157
self.assertEqual(client._url_path, url_path)
158158
self.assertEqual(client.__getattr__('get').__name__, 'http_request')
@@ -162,42 +162,42 @@ def test__getattr__(self):
162162
self.assertEqual(client._version, 3)
163163

164164
# Test GET
165-
mock_client._url_path += ['test']
166-
r = mock_client.get()
165+
client._url_path += ['test']
166+
r = client.get()
167167
self.assertEqual(r.status_code, 200)
168168

169169
# Test POST
170-
r = mock_client.put()
170+
r = client.put()
171171
self.assertEqual(r.status_code, 200)
172172

173173
# Test PATCH
174-
r = mock_client.patch()
174+
r = client.patch()
175175
self.assertEqual(r.status_code, 200)
176176

177177
# Test POST
178-
mock_client.response_code = 201
179-
r = mock_client.post()
178+
mock_opener.response_code = 201
179+
r = client.post()
180180
self.assertEqual(r.status_code, 201)
181181

182182
# Test DELETE
183-
mock_client.response_code = 204
184-
r = mock_client.delete()
183+
mock_opener.response_code = 204
184+
r = client.delete()
185185
self.assertEqual(r.status_code, 204)
186186

187-
mock_client.response_code = 400
188-
self.assertRaises(BadRequestsError, mock_client.get)
187+
mock_opener.response_code = 400
188+
self.assertRaises(BadRequestsError, client.get)
189189

190-
mock_client.response_code = 404
191-
self.assertRaises(NotFoundError, mock_client.post)
190+
mock_opener.response_code = 404
191+
self.assertRaises(NotFoundError, client.post)
192192

193-
mock_client.response_code = 415
194-
self.assertRaises(UnsupportedMediaTypeError, mock_client.patch)
193+
mock_opener.response_code = 415
194+
self.assertRaises(UnsupportedMediaTypeError, client.patch)
195195

196-
mock_client.response_code = 503
197-
self.assertRaises(ServiceUnavailableError, mock_client.delete)
196+
mock_opener.response_code = 503
197+
self.assertRaises(ServiceUnavailableError, client.delete)
198198

199-
mock_client.response_code = 523
200-
self.assertRaises(HTTPError, mock_client.delete)
199+
mock_opener.response_code = 523
200+
self.assertRaises(SG_HTTPError, client.delete)
201201

202202
def test_client_pickle_unpickle(self):
203203
pickled_client = pickle.dumps(self.client)

0 commit comments

Comments
 (0)