jenkins-bot submitted this change.

View Change

Approvals: Matěj Suchánek: Looks good to me, approved jenkins-bot: Verified
[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(-)

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."""

To view, visit change 789984. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ic39c00c8bc3165fb6c7f89c1b8838bb15542e7b3
Gerrit-Change-Number: 789984
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: D3r1ck01 <xsavitar.wiki@aol.com>
Gerrit-Reviewer: JAn Dudík <jan.dudik@gmail.com>
Gerrit-Reviewer: Matěj Suchánek <matejsuchanek97@gmail.com>
Gerrit-Reviewer: Multichill <maarten@mdammers.nl>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged