jenkins-bot has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1225072?usp=email )
Change subject: Fix: Do not raise UnknownExtensionError on non-Wikibase sites
......................................................................
Fix: Do not raise UnknownExtensionError on non-Wikibase sites
If a site is not connected to a Wikibase, return None instead of
raising UnknownExtensionError. This indicates that no related Page
was found.
Also no longer search for an archiveheader template if it is already
given with the archive template.
Bug: T414068
Change-Id: Ifeb4a9ba1f998034f6f365d3cbdda5110de86919
---
M pywikibot/site/_apisite.py
M scripts/archivebot.py
M tests/wikibase_tests.py
3 files changed, 24 insertions(+), 21 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
Tacsipacsi: Looks good to me, but someone else must approve
diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py
index dce623e..282cc49 100644
--- a/pywikibot/site/_apisite.py
+++ b/pywikibot/site/_apisite.py
@@ -46,7 +46,6 @@
SiteDefinitionError,
SpamblacklistError,
TitleblacklistError,
- UnknownExtensionError,
)
from pywikibot.site._basesite import BaseSite
from pywikibot.site._decorators import need_right
@@ -1384,17 +1383,16 @@
.. versionchanged:: 7.7
No longer raise NotimplementedError if used with a Wikibase
site.
+ .. versionchanged:: 11.0
+ No longer raise UnknownExtensionError if site is not
+ connected to a wikibase but retern None instead.
:param item: Id number of item, "Q###",
:return: Page, or Category object given by Wikibase item number
for this site object.
-
- :raises pywikibot.exceptions.UnknownExtensionError: site has no
- Wikibase extension
"""
if not self.has_data_repository:
- raise UnknownExtensionError(
- f'Wikibase is not implemented for {self}.')
+ return None
repo = self.data_repository()
dp = pywikibot.ItemPage(repo, item)
diff --git a/scripts/archivebot.py b/scripts/archivebot.py
index 369d5cc..9b80a85 100755
--- a/scripts/archivebot.py
+++ b/scripts/archivebot.py
@@ -188,7 +188,7 @@
The ``-namespace`` option is now respected by ``-page`` option.
"""
#
-# (C) Pywikibot team, 2006-2025
+# (C) Pywikibot team, 2006-2026
#
# Distributed under the terms of the MIT license.
#
@@ -469,6 +469,10 @@
the current timestamp to the previous if the current is lower.
.. versionchanged:: 7.7
Load unsigned threads using timestamp of the next thread.
+ .. versionchanged:: 11.0
+ Use explicit check for 'archiveheader' to avoid eager
+ evaluation of :meth:`get_header_template` when an
+ archiveheader exists within archive template.
"""
self.header = ''
self.threads = []
@@ -476,8 +480,16 @@
try:
text = self.get()
except NoPageError:
- self.header = self.archiver.get_attr('archiveheader',
- self.get_header_template())
+ # Use explicit check for 'archiveheader' instead of passing it as
+ # a default to get_attr(), because get_attr evaluates the default
+ # eagerly. Without this, get_header_template() would always be
+ # called, even when an archiveheader exists within archive
+ # template, defeating lazy fallback.
+ if 'archiveheader' in self.archiver.attributes:
+ self.header = self.archiver.get_attr('archiveheader')
+ else:
+ self.header = self.get_header_template()
+
if self.params:
self.header = self.header % self.params
return
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index 4097eb4..eb8cf13 100755
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""Tests for the Wikidata parts of the page module."""
#
-# (C) Pywikibot team, 2008-2025
+# (C) Pywikibot team, 2008-2026
#
# Distributed under the terms of the MIT license.
#
@@ -19,7 +19,6 @@
IsNotRedirectPageError,
IsRedirectPageError,
NoPageError,
- UnknownExtensionError,
WikiBaseError,
)
from pywikibot.page import ItemPage, PropertyPage, WikibasePage
@@ -1425,18 +1424,12 @@
with self.assertRaisesRegex(WikiBaseError, regex):
self.wdp.data_item()
- def test_has_data_repository(self, key) -> None:
- """Test that site has no data repository."""
- site = self.get_site(key)
- self.assertFalse(site.has_data_repository)
-
- def test_page_from_repository_fails(self, key) -> None:
- """Test that page_from_repository method fails."""
+ def test_missing_data_repository(self, key) -> None:
+ """Test page_from_repository with no data repository."""
site = self.get_site(key)
dummy_item = 'Q1'
- regex = r'^Wikibase is not implemented for .+\.$'
- with self.assertRaisesRegex(UnknownExtensionError, regex):
- site.page_from_repository(dummy_item)
+ self.assertFalse(site.has_data_repository)
+ self.assertIsNone(site.page_from_repository(dummy_item))
class TestJSON(WikidataTestCase):
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1225072?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: Ifeb4a9ba1f998034f6f365d3cbdda5110de86919
Gerrit-Change-Number: 1225072
Gerrit-PatchSet: 7
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: MarcoAurelio <[email protected]>
Gerrit-Reviewer: Tacsipacsi <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]