Skip to content

fix: update request exception logging and update tests #145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions python_http_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,12 @@ def _make_request(self, opener, request, timeout=None):
try:
return opener.open(request, timeout=timeout)
except HTTPError as err:
exc = handle_error(err)
exc.__cause__ = None
_logger.debug('{method} Response: {status} {body}'.format(
method=request.get_method(),
status=exc.status_code,
body=exc.body))
exc = handle_error(err)
exc.__cause__ = None
raise exc

def _(self, name):
Expand Down
70 changes: 35 additions & 35 deletions tests/test_unit.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
import pickle
import unittest

from python_http_client.client import Client
from python_http_client.client import Client, HTTPError, urllib
from python_http_client.exceptions import (
BadRequestsError, HTTPError,
HTTPError as SG_HTTPError,
BadRequestsError,
NotFoundError,
ServiceUnavailableError,
UnsupportedMediaTypeError,
handle_error
)

try:
# Python 3
import urllib.request as urllib
from unittest import mock
except ImportError:
# Python 2
import urllib2 as urllib
import mock

try:
Expand All @@ -27,10 +25,10 @@

class MockException(HTTPError):

def __init__(self, code):
self.code = code
self.reason = 'REASON'
self.hdrs = 'HEADERS'
def __init__(self, url, response_code):
super(MockException, self).__init__(
url, response_code, 'REASON', 'HEADERS', None
)

def read(self):
return 'BODY'
Expand All @@ -51,17 +49,16 @@ def read(self):
return 'RESPONSE BODY'


class MockClient(Client):
class MockOpener:

def __init__(self, host, response_code, timeout=None):
def __init__(self):
self.response_code = 200
Client.__init__(self, host)

def _make_request(self, opener, request, timeout=None):
def open(self, request, timeout=None):
if 200 <= self.response_code < 299: # if successful code
return MockResponse(self.response_code)
else:
raise handle_error(MockException(self.response_code))
raise MockException(request.get_full_url(), self.response_code)


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

def test__getattr__(self):
mock_client = MockClient(self.host, 200)
client = mock_client.__getattr__('hello')
@mock.patch('python_http_client.client.urllib')
def test__getattr__(self, mock_lib):
mock_opener = MockOpener()
mock_lib.build_opener.return_value = mock_opener

client = self.client.__getattr__('hello')
url_path = ['hello']
self.assertEqual(client._url_path, url_path)
self.assertEqual(client.__getattr__('get').__name__, 'http_request')
Expand All @@ -162,42 +162,42 @@ def test__getattr__(self):
self.assertEqual(client._version, 3)

# Test GET
mock_client._url_path += ['test']
r = mock_client.get()
client._url_path += ['test']
r = client.get()
self.assertEqual(r.status_code, 200)

# Test POST
r = mock_client.put()
r = client.put()
self.assertEqual(r.status_code, 200)

# Test PATCH
r = mock_client.patch()
r = client.patch()
self.assertEqual(r.status_code, 200)

# Test POST
mock_client.response_code = 201
r = mock_client.post()
mock_opener.response_code = 201
r = client.post()
self.assertEqual(r.status_code, 201)

# Test DELETE
mock_client.response_code = 204
r = mock_client.delete()
mock_opener.response_code = 204
r = client.delete()
self.assertEqual(r.status_code, 204)

mock_client.response_code = 400
self.assertRaises(BadRequestsError, mock_client.get)
mock_opener.response_code = 400
self.assertRaises(BadRequestsError, client.get)

mock_client.response_code = 404
self.assertRaises(NotFoundError, mock_client.post)
mock_opener.response_code = 404
self.assertRaises(NotFoundError, client.post)

mock_client.response_code = 415
self.assertRaises(UnsupportedMediaTypeError, mock_client.patch)
mock_opener.response_code = 415
self.assertRaises(UnsupportedMediaTypeError, client.patch)

mock_client.response_code = 503
self.assertRaises(ServiceUnavailableError, mock_client.delete)
mock_opener.response_code = 503
self.assertRaises(ServiceUnavailableError, client.delete)

mock_client.response_code = 523
self.assertRaises(HTTPError, mock_client.delete)
mock_opener.response_code = 523
self.assertRaises(SG_HTTPError, client.delete)

def test_client_pickle_unpickle(self):
pickled_client = pickle.dumps(self.client)
Expand Down