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