summaryrefslogtreecommitdiff
path: root/docker/errors.py
diff options
context:
space:
mode:
authorEvgeniy L <test0x0000@gmail.com>2014-04-07 13:31:13 +0400
committerEvgeniy L <test0x0000@gmail.com>2014-04-07 13:31:13 +0400
commit18d4db09ecc79cef49830fa2c28c5e99dd02be42 (patch)
tree41cca0b4e61a455c7e85b53f99b17fed201a1ca1 /docker/errors.py
parent231042a5202291ada6e1c2cd2e05d214ba3f5af2 (diff)
downloaddocker-py-18d4db09ecc79cef49830fa2c28c5e99dd02be42.tar.gz
Moved APIError exception to docker.errors module.
Diffstat (limited to 'docker/errors.py')
-rw-r--r--docker/errors.py37
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