jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/953197 )

Change subject: [bugfix] Extract code and family from dbname in 
APISite.fromDBName
......................................................................

[bugfix] Extract code and family from dbname in APISite.fromDBName

API:sitematrix does not return any site.code but site.lang instead.
Creating a Site object will fail for any site where lang is different
from code. Therefore extract site code and family from dbname directly.
(Alternatively it could be extracted from url)

Related tests were added.

Bug: T345036
Change-Id: Ic2e5c4d384fef8519bac6c13511c1a0d9479a103
---
M pywikibot/site/_apisite.py
M tests/site_tests.py
2 files changed, 45 insertions(+), 17 deletions(-)

Approvals:
  MisterSynergy: Looks good to me, but someone else must approve
  Xqt: Looks good to me, approved
  jenkins-bot: Verified




diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py
index f8097cc..ea9ba8c 100644
--- a/pywikibot/site/_apisite.py
+++ b/pywikibot/site/_apisite.py
@@ -184,14 +184,15 @@
         """
         return self._interwikimap[prefix].local

-    @classmethod
+    @staticmethod
     def fromDBName(  # noqa: N802
-        cls,
         dbname: str,
         site: Optional[BaseSite] = None
     ) -> BaseSite:
-        """
-        Create a site from a database name using the sitematrix.
+        """Create a site from a database name using the sitematrix.
+
+        .. versionchanged:: 8.4
+           changed from classmethod to staticmethod.

         :param dbname: database name
         :param site: Site to load sitematrix from. (Default meta.wikimedia.org)
@@ -200,19 +201,27 @@
         # TODO this only works for some WMF sites
         if not site:
             site = pywikibot.Site('meta')
+        param = {
+            'action': 'sitematrix',
+            'smlangprop': 'site',
+            'smsiteprop': ('code', 'dbname'),
+            'formatversion': 2,
+        }
         req = site._request(expiry=datetime.timedelta(days=10),
-                            parameters={'action': 'sitematrix'})
+                            parameters=param)
         data = req.submit()
         for key, val in data['sitematrix'].items():
             if key == 'count':
                 continue
-            if 'code' in val:
-                lang = val['code']
+            if 'site' in val:
                 for m_site in val['site']:
                     if m_site['dbname'] == dbname:
-                        if m_site['code'] == 'wiki':
-                            m_site['code'] = 'wikipedia'
-                        return pywikibot.Site(lang, m_site['code'])
+                        # extract site from dbname
+                        family = m_site['code']
+                        code = removesuffix(dbname, family).replace('_', '-')
+                        if family == 'wiki':
+                            family = 'wikipedia'
+                        return pywikibot.Site(code, family)
             else:  # key == 'specials'
                 for m_site in val:
                     if m_site['dbname'] == dbname:
diff --git a/tests/site_tests.py b/tests/site_tests.py
index add933a..5908217 100755
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -89,17 +89,19 @@
     def test_constructors(self):
         """Test cases for site constructors."""
         test_list = [
+            ['alswiki', 'wikipedia:als'],  # see T345036
+            ['commonswiki', 'commons:commons'],
+            ['dewikinews', 'wikinews:de'],
             ['enwiki', 'wikipedia:en'],
             ['eswikisource', 'wikisource:es'],
-            ['dewikinews', 'wikinews:de'],
-            ['ukwikivoyage', 'wikivoyage:uk'],
             ['metawiki', 'meta:meta'],
-            ['commonswiki', 'commons:commons'],
-            ['wikidatawiki', 'wikidata:wikidata'],
-            ['testwikidatawiki', 'wikidata:test'],
-            ['testwiki', 'wikipedia:test'],  # see T225729, T228300
-            ['test2wiki', 'wikipedia:test2'],  # see T225729
+            ['roa_rupwiki', 'wikipedia:roa-rup'],  # see T345036
             ['sourceswiki', 'wikisource:mul'],  # see T226960
+            ['test2wiki', 'wikipedia:test2'],  # see T225729
+            ['testwiki', 'wikipedia:test'],  # see T225729, T228300
+            ['testwikidatawiki', 'wikidata:test'],
+            ['ukwikivoyage', 'wikivoyage:uk'],
+            ['wikidatawiki', 'wikidata:wikidata'],
         ]
         if isinstance(self.site.family, pywikibot.family.WikimediaFamily):
             site = self.site

--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/953197
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ic2e5c4d384fef8519bac6c13511c1a0d9479a103
Gerrit-Change-Number: 953197
Gerrit-PatchSet: 6
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: MisterSynergy <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to