jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/789984 )
Change subject: [bugfix] Call ExistingPageBot.skip_page() first ......................................................................
[bugfix] Call ExistingPageBot.skip_page() first
If a ExistingPageBot is subclassed and also has its own skip_page, call `super().skip_page()` first to ensure that non existent pages are filtered before other calls are made
- update several scripts - add a warning in ExistingPageBot.skip_page method
Bug: T86491 Change-Id: Ic39c00c8bc3165fb6c7f89c1b8838bb15542e7b3 --- M pywikibot/bot.py M scripts/blockpageschecker.py M scripts/newitem.py M scripts/noreferences.py M scripts/reflinks.py M scripts/replace.py 6 files changed, 27 insertions(+), 6 deletions(-)
Approvals: Matěj Suchánek: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/bot.py b/pywikibot/bot.py index 68eb169..c6e238c 100644 --- a/pywikibot/bot.py +++ b/pywikibot/bot.py @@ -1959,7 +1959,12 @@ """A CurrentPageBot class which only treats existing pages."""
def skip_page(self, page: 'pywikibot.page.BasePage') -> bool: - """Treat page if it exists and handle NoPageError.""" + """Treat page if it exists and handle NoPageError. + + .. warning:: If subclassed, call `super().skip_page()` first to + ensure that non existent pages are filtered before other + calls are made + """ if not page.exists(): pywikibot.warning('Page {page} does not exist on {page.site}.' .format(page=page)) diff --git a/scripts/blockpageschecker.py b/scripts/blockpageschecker.py index 79f56a3..cd677e8 100755 --- a/scripts/blockpageschecker.py +++ b/scripts/blockpageschecker.py @@ -233,6 +233,9 @@ # "{} is sysop-protected : this account can't edit " # "it! Skipping...".format(pagename)) # continue + if super().skip_page(page): + return True + page.protection() if not page.has_permission(): pywikibot.warning( @@ -240,7 +243,7 @@ .format(page)) return True
- return super().skip_page(page) + return False
def remove_templates(self): """Understand if the page is blocked has the right template.""" diff --git a/scripts/newitem.py b/scripts/newitem.py index 693a79b..e6469d3 100755 --- a/scripts/newitem.py +++ b/scripts/newitem.py @@ -139,6 +139,9 @@
def skip_page(self, page) -> bool: """Skip pages which are unwanted to treat.""" + if super().skip_page(page): + return True + if page.editTime() > self.lastEditBefore: pywikibot.output( 'Last edit on {page} was on {page.latest_revision.timestamp}.' @@ -170,7 +173,7 @@ % (page, template)) return True
- return super().skip_page(page) + return False
def treat_page_and_item(self, page, item) -> None: """Treat page/item.""" diff --git a/scripts/noreferences.py b/scripts/noreferences.py index 35aff3d..59eb118 100755 --- a/scripts/noreferences.py +++ b/scripts/noreferences.py @@ -709,13 +709,16 @@
def skip_page(self, page): """Check whether the page could be processed.""" + if super().skip_page(page): + return True + if self.site.sitename == 'wikipedia:en' and page.isIpEdit(): pywikibot.warning( 'Page {} is edited by IP. Possible vandalized' .format(page.title(as_link=True))) return True
- return super().skip_page(page) + return False
def treat_page(self) -> None: """Run the bot.""" diff --git a/scripts/reflinks.py b/scripts/reflinks.py index 23ae56b..aa3de1a 100755 --- a/scripts/reflinks.py +++ b/scripts/reflinks.py @@ -541,10 +541,14 @@
def skip_page(self, page): """Skip unwanted pages.""" + if super().skip_page(page): + return True + if not page.has_permission(): pywikibot.warning("You can't edit page {page}" .format(page=page)) return True - return super().skip_page(page) + + return False
def treat(self, page) -> None: """Process one page.""" diff --git a/scripts/replace.py b/scripts/replace.py index 6d807db..e5a460e 100755 --- a/scripts/replace.py +++ b/scripts/replace.py @@ -648,6 +648,9 @@
def skip_page(self, page): """Check whether treat should be skipped for the page.""" + if super().skip_page(page): + return True + if self.isTitleExcepted(page.title()): pywikibot.warning( 'Skipping {} because the title is on the exceptions list.' @@ -658,7 +661,7 @@ pywikibot.warning("You can't edit page {}".format(page)) return True
- return super().skip_page(page) + return False
def treat(self, page) -> None: """Work on each page retrieved from generator."""
pywikibot-commits@lists.wikimedia.org