Page MenuHomePhabricator

pywikibot.APISite.fromDBName does not work for roa_rupwiki
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Try to instantiate a Site object via pywikibot.APISite.fromDBName for dbname "roa_rupwiki":
import pywikibot

site = pywikibot.APISite.fromDBName('roa_rupwiki')

What happens?:

  • An "UnknownSiteError" exception is raised. Full message:
---------------------------------------------------------------------------
UnknownSiteError                          Traceback (most recent call last)
Cell In[8], line 3
      1 import pywikibot
----> 3 site = pywikibot.APISite.fromDBName('roa_rupwiki')

File /srv/paws/lib/python3.10/site-packages/pywikibot/site/_apisite.py:215, in APISite.fromDBName(cls, dbname, site)
    213             if m_site['code'] == 'wiki':
    214                 m_site['code'] = 'wikipedia'
--> 215             return pywikibot.Site(lang, m_site['code'])
    216 else:  # key == 'specials'
    217     for m_site in val:

File /srv/paws/lib/python3.10/site-packages/pywikibot/__init__.py:253, in Site(code, fam, user, interface, url)
    251 key = f'{interface.__name__}:{fam}:{code}:{user}'
    252 if key not in _sites or not isinstance(_sites[key], interface):
--> 253     _sites[key] = interface(code=code, fam=fam, user=user)
    254     debug(f"Instantiated {interface.__name__} object '{_sites[key]}'")
    256     if _sites[key].code != code:

File /srv/paws/lib/python3.10/site-packages/pywikibot/site/_apisite.py:118, in APISite.__init__(self, code, fam, user)
    111 def __init__(
    112     self,
    113     code: str,
    114     fam: Union[str, 'pywikibot.family.Family', None] = None,
    115     user: Optional[str] = None
    116 ) -> None:
    117     """Initializer."""
--> 118     super().__init__(code, fam, user)
    119     self._globaluserinfo: Dict[Union[int, str], Any] = {}
    120     self._interwikimap = _InterwikiMap(self)

File /srv/paws/lib/python3.10/site-packages/pywikibot/site/_basesite.py:89, in BaseSite.__init__(self, code, fam, user)
     86     else:
     87         error_msg = ("Language '{}' does not exist in family {}"
     88                      .format(self.__code, self.__family.name))
---> 89         raise UnknownSiteError(error_msg)
     91 self._username = normalize_username(user)
     93 self.use_hard_category_redirects = (
     94     self.code in self.family.use_hard_category_redirects)

UnknownSiteError: Language 'rup' does not exist in family wikipedia

What should have happened instead?:

  • The Site object should have been instantiated

Software version (skip for WMF-hosted wikis like Wikipedia):

  • Problem started showing up in fairly recent (22-27 August 2023) versions of pywikibot on PAWS and Toolforge (shared pywikibot); it did work before, though

Other information (browser name/version, screenshots, etc.):

Event Timeline

Xqt triaged this task as High priority.Aug 28 2023, 3:28 PM
Xqt added a project: Upstream.
Xqt subscribed.

Seems this is an upstream issue because 'roa_rup' code has no site information (anymore?) within the sitematrix:

https://en.wikipedia.org/w/api.php?action=sitematrix&formatversion=2

I've no glue about the reason but we should have a workaround for this.

pywikibot.APISite.fromDBName does not work for sites where lang is not code:

import pywikibot
site = pywikibot.APISite.fromDBName('roa_rupwiki')
pywikibot.exceptions.UnknownSiteError: Language 'rup' does not exist in family wikipedia
site = pywikibot.Site('roa-rup')
site.lang, site.code
('rup', 'roa-rup')

site = pywikibot.APISite.fromDBName('alswiki')
pywikibot.exceptions.UnknownSiteError: Language 'gsw' does not exist in family wikipedia
site = pywikibot.Site('als')
site.lang, site.code
('gsw', 'als')

But sitematrix does not reflect the code (except inside url) but lang twice.

Change 953197 had a related patch set uploaded (by Xqt; author: Xqt):

[pywikibot/core@master] [bugfix] Extract code and family from dbname in APISite.fromDBName

https://gerrit.wikimedia.org/r/953197

Change 953197 merged by jenkins-bot:

[pywikibot/core@master] [bugfix] Extract code and family from dbname in APISite.fromDBName

https://gerrit.wikimedia.org/r/953197

Change 959242 had a related patch set uploaded (by Xqt; author: Xqt):

[pywikibot/core@stable] [8.3.3] Publish Pywikibot 8.3.3

https://gerrit.wikimedia.org/r/959242

Change 959242 merged by Xqt:

[pywikibot/core@stable] [8.3.3] Publish Pywikibot 8.3.3

https://gerrit.wikimedia.org/r/959242