Whym has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/293957

Change subject: Site: return load status in load*(); allow page_exists to raise 
PageLoadFailed
......................................................................

Site: return load status in load*(); allow page_exists to raise PageLoadFailed

loadpageinfo, loadpageprops, loadimageinfo starts to return True/False to show
whether the loading has happened or not. (It doesn't when sametitle() fails.)

page_exists() may raise a (new) PageLoadFailed error. Previously it raised
AttributeError: 'Page' object has no attribute '_pageid' which was harder
to decypher. See T94826.

Change-Id: I554417d81718158effe9bd3b1d233aa91a3464ef
---
M pywikibot/exceptions.py
M pywikibot/site.py
2 files changed, 20 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/57/293957/1

diff --git a/pywikibot/exceptions.py b/pywikibot/exceptions.py
index a59b69b..54b28cd 100644
--- a/pywikibot/exceptions.py
+++ b/pywikibot/exceptions.py
@@ -31,6 +31,7 @@
   - SectionError: The section specified by # does not exist
   - NotEmailableError: The target user has disabled email
   - NoMoveTarget: An expected move target page does not exist
+  - PageLoadFailed: Page attempted to be loaded but failed
 
 PageSaveRelatedError: page exceptions within the save operation on a Page
 (alias: PageNotSaved).
@@ -231,6 +232,15 @@
     pass
 
 
+class PageLoadFailed(PageRelatedError):
+
+    """Page attempted to be loaded but failed."""
+
+    message = "Page %s could not be loaded."
+
+    pass
+
+
 class SiteDefinitionError(Error):  # noqa
 
     """Site does not exist"""
diff --git a/pywikibot/site.py b/pywikibot/site.py
index ce7f628..0e3b0e9 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -47,6 +47,7 @@
     IsNotRedirectPage,
     CircularRedirect,
     InterwikiRedirectPage,
+    PageLoadFailed,
     LockedPage,
     CascadeLockedPage,
     LockedNoPage,
@@ -2863,6 +2864,7 @@
             return (0, 0, 0)
 
     def _update_page(self, page, query, method_name):
+        loaded = False
         for pageitem in query:
             if not self.sametitle(pageitem['title'],
                                   page.title(withSection=False)):
@@ -2871,6 +2873,8 @@
                         method_name, page, pageitem['title']))
                 continue
             api.update_page(page, pageitem, query.props)
+            loaded = True
+        return loaded
 
     def loadpageinfo(self, page, preload=False):
         """Load page info from api and store in page attributes."""
@@ -2883,7 +2887,7 @@
                                 type_arg="info",
                                 titles=title.encode(self.encoding()),
                                 inprop=inprop)
-        self._update_page(page, query, 'loadpageinfo')
+        return self._update_page(page, query, 'loadpageinfo')
 
     def loadcoordinfo(self, page):
         """Load [[mw:Extension:GeoData]] info."""
@@ -2895,7 +2899,7 @@
                                         'country', 'region',
                                         'globe'],
                                 coprimary='all')
-        self._update_page(page, query, 'loadcoordinfo')
+        return self._update_page(page, query, 'loadcoordinfo')
 
     def loadpageprops(self, page):
         """Load page props for the given page."""
@@ -2904,7 +2908,7 @@
                                 type_arg="pageprops",
                                 titles=title.encode(self.encoding()),
                                 )
-        self._update_page(page, query, 'loadpageprops')
+        return self._update_page(page, query, 'loadpageprops')
 
     def loadimageinfo(self, page, history=False):
         """Load image info from api and save in page attributes.
@@ -2955,12 +2959,13 @@
                                 type_arg="flowinfo",
                                 titles=title.encode(self.encoding()),
                                 )
-        self._update_page(page, query, 'loadflowinfo')
+        return self._update_page(page, query, 'loadflowinfo')
 
     def page_exists(self, page):
         """Return True if and only if page is an existing page on site."""
         if not hasattr(page, "_pageid"):
-            self.loadpageinfo(page)
+            if not self.loadpageinfo(page):
+                raise PageLoadFailed(page)
         return page._pageid > 0
 
     def page_restrictions(self, page):

-- 
To view, visit https://gerrit.wikimedia.org/r/293957
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I554417d81718158effe9bd3b1d233aa91a3464ef
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Whym <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to