From a5d20813e8d7589b0cec030c149748e53ea555a5 Mon Sep 17 00:00:00 2001 From: vinay-google <69166360+vinay-google@users.noreply.github.com> Date: Sat, 3 Apr 2021 03:00:05 -0700 Subject: [PATCH] feat: Adds support for errors.py to also use 'errors' for error_details (#1281) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/google-api-python-client/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [x] Ensure the tests and linter pass - [x] Code coverage does not decrease (if any source code was changed) - [x] Appropriate docs were updated (if necessary) Fixes #1279 🦕 --- googleapiclient/errors.py | 2 +- tests/test_errors.py | 5 +++-- tests/test_http.py | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/googleapiclient/errors.py b/googleapiclient/errors.py index 33ee682a4d0..332327ec04f 100644 --- a/googleapiclient/errors.py +++ b/googleapiclient/errors.py @@ -61,7 +61,7 @@ def _get_reason(self): data = self.content.decode("utf-8") if isinstance(data, dict): reason = data["error"]["message"] - error_detail_keyword = next((kw for kw in ["detail", "details", "message"] if kw in data["error"]), "") + error_detail_keyword = next((kw for kw in ["detail", "details", "errors", "message"] if kw in data["error"]), "") if error_detail_keyword: self.error_details = data["error"][error_detail_keyword] elif isinstance(data, list) and len(data) > 0: diff --git a/tests/test_errors.py b/tests/test_errors.py index 9c139a6b60e..955526ff307 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -141,5 +141,6 @@ def test_error_detail_for_missing_message_in_error(self): reason="Failed", ) error = HttpError(resp, content) - self.assertEqual(str(error), '') - self.assertEqual(error.error_details, 'country is required') + expected_error_details = "[{'domain': 'global', 'reason': 'required', 'message': 'country is required', 'locationType': 'parameter', 'location': 'country'}]" + self.assertEqual(str(error), '' % expected_error_details) + self.assertEqual(str(error.error_details), expected_error_details) diff --git a/tests/test_http.py b/tests/test_http.py index 4e613589499..bfd9ba865d7 100644 --- a/tests/test_http.py +++ b/tests/test_http.py @@ -1587,7 +1587,7 @@ def test_execute_batch_http_error(self): "' + "Details: \"[{'domain': 'usageLimits', 'reason': 'accessNotConfigured', 'message': 'Access Not Configured', 'debugInfo': 'QuotaState: BLOCKED'}]\">" ) self.assertEqual(expected, str(callbacks.exceptions["2"]))