aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/core/errors.py
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-02-03 14:45:32 +0100
committerDavid Medina <davidmedina9@gmail.com>2012-02-03 14:46:54 +0100
commitf01bc94a33d8644da65b5fa895c222e9ee057b50 (patch)
tree3bfc837901a54f97a30f1d24431d8322906de192 /pygithub3/core/errors.py
parentPypi environment by setuptools (diff)
downloadpython-github3-f01bc94a33d8644da65b5fa895c222e9ee057b50.tar.xz
python-github3-f01bc94a33d8644da65b5fa895c222e9ee057b50.zip
Fix imports to new environment
Absolute imports as PEP8 tells
Diffstat (limited to 'pygithub3/core/errors.py')
-rw-r--r--pygithub3/core/errors.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/pygithub3/core/errors.py b/pygithub3/core/errors.py
new file mode 100644
index 0000000..0d58c16
--- /dev/null
+++ b/pygithub3/core/errors.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+import json
+
+
+class BadRequest(Exception):
+ pass
+
+
+class UnprocessableEntity(Exception):
+ pass
+
+
+class GithubError(object):
+ """ Handler for API errors """
+
+ def __init__(self, response):
+ self.response = response
+ self.status_code = response.status_code
+ try:
+ self.debug = json.loads(response.content)
+ except (ValueError, TypeError):
+ self.debug = {'message': response.content}
+
+ def error_400(self):
+ return BadRequest("400 - %s" % self.debug.get('message'))
+
+ def error_422(self):
+ errors = self.debug.get('errors')
+ if errors:
+ errors = ['{resource}: {code} => {field}'.format(**error)
+ for error in errors]
+ return UnprocessableEntity(
+ '422 - %s %s' % (self.debug.get('message'), errors))
+
+ def process(self):
+ raise_error = getattr(self, 'error_%s' % self.status_code, False)
+ if raise_error:
+ raise raise_error()
+ self.response.raise_for_status()