diff options
author | Evgeniy L <test0x0000@gmail.com> | 2014-04-07 13:31:13 +0400 |
---|---|---|
committer | Evgeniy L <test0x0000@gmail.com> | 2014-04-07 13:31:13 +0400 |
commit | 18d4db09ecc79cef49830fa2c28c5e99dd02be42 (patch) | |
tree | 41cca0b4e61a455c7e85b53f99b17fed201a1ca1 /docker/errors.py | |
parent | 231042a5202291ada6e1c2cd2e05d214ba3f5af2 (diff) | |
download | docker-py-18d4db09ecc79cef49830fa2c28c5e99dd02be42.tar.gz |
Moved APIError exception to docker.errors module.
Diffstat (limited to 'docker/errors.py')
-rw-r--r-- | docker/errors.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/docker/errors.py b/docker/errors.py index a462f93..9aad700 100644 --- a/docker/errors.py +++ b/docker/errors.py @@ -11,6 +11,43 @@ # See the License for the specific language governing permissions and # limitations under the License. +import requests + + +class APIError(requests.exceptions.HTTPError): + def __init__(self, message, response, explanation=None): + # requests 1.2 supports response as a keyword argument, but + # requests 1.1 doesn't + super(APIError, self).__init__(message) + self.response = response + + self.explanation = explanation + + if self.explanation is None and response.content: + self.explanation = response.content.strip() + + def __str__(self): + message = super(APIError, self).__str__() + + if self.is_client_error(): + message = '%s Client Error: %s' % ( + self.response.status_code, self.response.reason) + + elif self.is_server_error(): + message = '%s Server Error: %s' % ( + self.response.status_code, self.response.reason) + + if self.explanation: + message = '%s ("%s")' % (message, self.explanation) + + return message + + def is_client_error(self): + return 400 <= self.response.status_code < 500 + + def is_server_error(self): + return 500 <= self.response.status_code < 600 + class DockerException(Exception): pass |