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]

Reply via email to