summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNejc Habjan <hab.nejc@gmail.com>2020-03-30 01:19:23 +0200
committerNejc Habjan <hab.nejc@gmail.com>2020-03-30 01:19:23 +0200
commit79fef262c3e05ff626981c891d9377abb1e18533 (patch)
tree360a2e7d0196441fff5132edaaede48c1e8fa283
parentc5904c4c2e79ec302ff0de20bcb2792be4924bbe (diff)
downloadgitlab-fix/raise-from.tar.gz
chore: use raise..from for chained exceptions (#939)fix/raise-from
-rw-r--r--gitlab/__init__.py22
-rw-r--r--gitlab/config.py8
-rw-r--r--gitlab/exceptions.py2
-rw-r--r--gitlab/tests/test_exceptions.py19
-rw-r--r--gitlab/v4/objects.py4
5 files changed, 40 insertions, 15 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index a12ffb9..3170b41 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -605,10 +605,10 @@ class Gitlab(object):
):
try:
return result.json()
- except Exception:
+ except Exception as e:
raise GitlabParsingError(
error_message="Failed to parse the server message"
- )
+ ) from e
else:
return result
@@ -685,8 +685,10 @@ class Gitlab(object):
try:
if result.headers.get("Content-Type", None) == "application/json":
return result.json()
- except Exception:
- raise GitlabParsingError(error_message="Failed to parse the server message")
+ except Exception as e:
+ raise GitlabParsingError(
+ error_message="Failed to parse the server message"
+ ) from e
return result
def http_put(self, path, query_data=None, post_data=None, files=None, **kwargs):
@@ -721,8 +723,10 @@ class Gitlab(object):
)
try:
return result.json()
- except Exception:
- raise GitlabParsingError(error_message="Failed to parse the server message")
+ except Exception as e:
+ raise GitlabParsingError(
+ error_message="Failed to parse the server message"
+ ) from e
def http_delete(self, path, **kwargs):
"""Make a PUT request to the Gitlab server.
@@ -788,8 +792,10 @@ class GitlabList(object):
try:
self._data = result.json()
- except Exception:
- raise GitlabParsingError(error_message="Failed to parse the server message")
+ except Exception as e:
+ raise GitlabParsingError(
+ error_message="Failed to parse the server message"
+ ) from e
self._current = 0
diff --git a/gitlab/config.py b/gitlab/config.py
index 2272dd3..1b665ed 100644
--- a/gitlab/config.py
+++ b/gitlab/config.py
@@ -60,18 +60,18 @@ class GitlabConfigParser(object):
if self.gitlab_id is None:
try:
self.gitlab_id = self._config.get("global", "default")
- except Exception:
+ except Exception as e:
raise GitlabIDError(
"Impossible to get the gitlab id (not specified in config file)"
- )
+ ) from e
try:
self.url = self._config.get(self.gitlab_id, "url")
- except Exception:
+ except Exception as e:
raise GitlabDataError(
"Impossible to get gitlab informations from "
"configuration (%s)" % self.gitlab_id
- )
+ ) from e
self.ssl_verify = True
try:
diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py
index d6791f2..9feff6d 100644
--- a/gitlab/exceptions.py
+++ b/gitlab/exceptions.py
@@ -270,7 +270,7 @@ def on_http_error(error):
try:
return f(*args, **kwargs)
except GitlabHttpError as e:
- raise error(e.error_message, e.response_code, e.response_body)
+ raise error(e.error_message, e.response_code, e.response_body) from e
return wrapped_f
diff --git a/gitlab/tests/test_exceptions.py b/gitlab/tests/test_exceptions.py
new file mode 100644
index 0000000..1f00af0
--- /dev/null
+++ b/gitlab/tests/test_exceptions.py
@@ -0,0 +1,19 @@
+import unittest
+
+from gitlab import exceptions
+
+
+class TestExceptions(unittest.TestCase):
+ def test_error_raises_from_http_error(self):
+ """Methods decorated with @on_http_error should raise from GitlabHttpError."""
+
+ class TestError(Exception):
+ pass
+
+ @exceptions.on_http_error(TestError)
+ def raise_error_from_http_error():
+ raise exceptions.GitlabHttpError
+
+ with self.assertRaises(TestError) as context:
+ raise_error_from_http_error()
+ self.assertIsInstance(context.exception.__cause__, exceptions.GitlabHttpError)
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 8852a1e..a2f6153 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -2720,14 +2720,14 @@ class ProjectTag(ObjectDeleteMixin, RESTObject):
path, post_data=data, **kwargs
)
except exc.GitlabHttpError as e:
- raise exc.GitlabCreateError(e.response_code, e.error_message)
+ raise exc.GitlabCreateError(e.response_code, e.error_message) from e
else:
try:
server_data = self.manager.gitlab.http_put(
path, post_data=data, **kwargs
)
except exc.GitlabHttpError as e:
- raise exc.GitlabUpdateError(e.response_code, e.error_message)
+ raise exc.GitlabUpdateError(e.response_code, e.error_message) from e
self.release = server_data