diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2020-03-30 01:19:23 +0200 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2020-03-30 01:19:23 +0200 |
commit | 79fef262c3e05ff626981c891d9377abb1e18533 (patch) | |
tree | 360a2e7d0196441fff5132edaaede48c1e8fa283 | |
parent | c5904c4c2e79ec302ff0de20bcb2792be4924bbe (diff) | |
download | gitlab-fix/raise-from.tar.gz |
chore: use raise..from for chained exceptions (#939)fix/raise-from
-rw-r--r-- | gitlab/__init__.py | 22 | ||||
-rw-r--r-- | gitlab/config.py | 8 | ||||
-rw-r--r-- | gitlab/exceptions.py | 2 | ||||
-rw-r--r-- | gitlab/tests/test_exceptions.py | 19 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 4 |
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 |