jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1318204?usp=email )

Change subject: citoid: raise CitoidError on error response
......................................................................

citoid: raise CitoidError on error response

Raise new implemented CitoidError when the Citoid service returns an
error response. This prevents confusing error messages caused by
unexpected response.

Bug: T433230
Change-Id: Ib9c2fd98343946f9dbc23597426e01ccfef95371
---
M pywikibot/data/citoid.py
M pywikibot/exceptions.py
2 files changed, 27 insertions(+), 9 deletions(-)

Approvals:
  jenkins-bot: Verified
  Strainu: Looks good to me, approved




diff --git a/pywikibot/data/citoid.py b/pywikibot/data/citoid.py
index 6f0ceb7..99afefc 100644
--- a/pywikibot/data/citoid.py
+++ b/pywikibot/data/citoid.py
@@ -13,9 +13,8 @@
 from dataclasses import dataclass
 from typing import Any

-import pywikibot
 from pywikibot.comms import http
-from pywikibot.exceptions import ApiNotAvailableError, Error
+from pywikibot.exceptions import ApiNotAvailableError, CitoidError
 from pywikibot.site import BaseSite


@@ -41,9 +40,19 @@
     ) -> dict[str, Any]:
         """Get a citation from the citoid service.

-        :param response_format: Return format, e.g. 'bibtex', 'wikibase', etc.
+        .. version-changed:: 11.7
+           Raise :exc:`CitoidError` if the Citoid service returns an
+           error with the response dict.
+
+        :param response_format: Return format, e.g. 'bibtex', 'wikibase',
+            etc.
         :param ref_url: The URL to get the citation for.
         :return: A dictionary with the citation data.
+        :raises ApiNotAvailableError: Citoid endpoint not configured for
+            the given site.
+        :raises CitoidError: Raised with the error returned by the
+            Citoid service.
+        :raises ValueError: Invalid format for *response_format*.
         """
         if response_format not in VALID_FORMAT:
             raise ValueError(f'Invalid format {response_format}, '
@@ -56,9 +65,9 @@
         ref_url = urllib.parse.quote(ref_url, safe='')
         api_url = urllib.parse.urljoin(base_url,
                                        f'{response_format}/{ref_url}')
-        try:
-            json = http.request(self.site, api_url).json()
-            return json
-        except Error as e:
-            pywikibot.log(f'Caught pywikibot error {e}')
-            raise
+        data = http.request(self.site, api_url).json()
+
+        if 'error' in data:
+            raise CitoidError(data['error'])
+
+        return data
diff --git a/pywikibot/exceptions.py b/pywikibot/exceptions.py
index 9cd75cb..30af4ad 100644
--- a/pywikibot/exceptions.py
+++ b/pywikibot/exceptions.py
@@ -15,6 +15,7 @@
           |    └── UploadError
           ├── AutoblockUserError
           ├── CaptchaError
+          ├── CitoidError
           ├── ClientError
           |    └── Client414Error
           ├── InvalidTitleError
@@ -289,6 +290,14 @@
         return self.info


+class CitoidError(Error):
+
+    """The Citoid service returned an error.
+
+    .. version-added:: 11.7
+    """
+
+
 class PageRelatedError(Error):

     """Abstract Exception, used when the exception concerns a particular Page.

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1318204?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ib9c2fd98343946f9dbc23597426e01ccfef95371
Gerrit-Change-Number: 1318204
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Strainu <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to