summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex-dr <alex@datarobot.com>2017-03-22 00:41:32 -0400
committeralex-dr <alex@datarobot.com>2017-03-22 00:49:07 -0400
commite0e740438087971bc976a57cdb8d3044fb3fecd4 (patch)
tree4680e1b14c1137e7baf8c612bceb9960596e82d0
parent24f75ea212e2ec08272fb73f4af1dc587132236f (diff)
downloaddocker-py-e0e740438087971bc976a57cdb8d3044fb3fecd4.tar.gz
Fix APIError status_code property for client/server errors
requests.Response objects evaluate as falsy when the status_code attribute is in the 400-500 range. Therefore we are assured that prior to this change, APIError would show `is_server_error() == False` when generated with a 500-level response and `is_client_error() == False` when generated with a 400-level response. This is not desirable. Added some seemingly dry (not DRY) unit tests to ensure nothing silly slips back in here. Signed-off-by: alex-dr <alex@datarobot.com>
-rw-r--r--docker/errors.py2
-rw-r--r--tests/unit/errors_test.py65
2 files changed, 66 insertions, 1 deletions
diff --git a/docker/errors.py b/docker/errors.py
index d9b197d..03b89c1 100644
--- a/docker/errors.py
+++ b/docker/errors.py
@@ -59,7 +59,7 @@ class APIError(requests.exceptions.HTTPError, DockerException):
@property
def status_code(self):
- if self.response:
+ if self.response is not None:
return self.response.status_code
def is_client_error(self):
diff --git a/tests/unit/errors_test.py b/tests/unit/errors_test.py
index 876ede3..b78af4e 100644
--- a/tests/unit/errors_test.py
+++ b/tests/unit/errors_test.py
@@ -1,5 +1,7 @@
import unittest
+import requests
+
from docker.errors import (APIError, DockerException,
create_unexpected_kwargs_error)
@@ -11,6 +13,69 @@ class APIErrorTest(unittest.TestCase):
except DockerException:
pass
+ def test_status_code_200(self):
+ """The status_code property is present with 200 response."""
+ resp = requests.Response()
+ resp.status_code = 200
+ err = APIError('', response=resp)
+ assert err.status_code == 200
+
+ def test_status_code_400(self):
+ """The status_code property is present with 400 response."""
+ resp = requests.Response()
+ resp.status_code = 400
+ err = APIError('', response=resp)
+ assert err.status_code == 400
+
+ def test_status_code_500(self):
+ """The status_code property is present with 500 response."""
+ resp = requests.Response()
+ resp.status_code = 500
+ err = APIError('', response=resp)
+ assert err.status_code == 500
+
+ def test_is_server_error_200(self):
+ """Report not server error on 200 response."""
+ resp = requests.Response()
+ resp.status_code = 200
+ err = APIError('', response=resp)
+ assert err.is_server_error() is False
+
+ def test_is_server_error_300(self):
+ """Report not server error on 300 response."""
+ resp = requests.Response()
+ resp.status_code = 300
+ err = APIError('', response=resp)
+ assert err.is_server_error() is False
+
+ def test_is_server_error_400(self):
+ """Report not server error on 400 response."""
+ resp = requests.Response()
+ resp.status_code = 400
+ err = APIError('', response=resp)
+ assert err.is_server_error() is False
+
+ def test_is_server_error_500(self):
+ """Report server error on 500 response."""
+ resp = requests.Response()
+ resp.status_code = 500
+ err = APIError('', response=resp)
+ assert err.is_server_error() is True
+
+ def test_is_client_error_500(self):
+ """Report not client error on 500 response."""
+ resp = requests.Response()
+ resp.status_code = 500
+ err = APIError('', response=resp)
+ assert err.is_client_error() is False
+
+ def test_is_client_error_400(self):
+ """Report client error on 400 response."""
+ resp = requests.Response()
+ resp.status_code = 400
+ err = APIError('', response=resp)
+ assert err.is_client_error() is True
+
class CreateUnexpectedKwargsErrorTest(unittest.TestCase):
def test_create_unexpected_kwargs_error_single(self):