Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1358406?usp=email )
Change subject: [bugfix] Compare full URLs in APISite.interwiki_prefix() ...................................................................... [bugfix] Compare full URLs in APISite.interwiki_prefix() The interwiki map of a site holds full URLs with a $1 placeholder like "https://en.wikipedia.org/wiki/$1", but interwiki_prefix() looked them up with the relative paths of BaseSite._interwiki_urls() like "/wiki/{}". These never match, so the method raised KeyError for every site. Build the full URL with base_url() and the $1 placeholder before the lookup. _interwiki_urls() is unchanged because other callers need the relative paths. Bug: T312699 Change-Id: I4e53091c6056b91e0654187952d71040fac6e110 --- M pywikibot/site/_apisite.py M tests/interwikimap_tests.py 2 files changed, 71 insertions(+), 1 deletion(-) Approvals: Xqt: Verified; Looks good to me, approved diff --git a/pywikibot/site/_apisite.py b/pywikibot/site/_apisite.py index c4027b2..48553c7 100644 --- a/pywikibot/site/_apisite.py +++ b/pywikibot/site/_apisite.py @@ -182,7 +182,9 @@ """ assert site is not None, 'Site must not be None' prefixes = set() - for url in site._interwiki_urls(): + for path in site._interwiki_urls(): + # the interwiki map holds full URLs with a $1 placeholder + url = site.base_url(path.replace('{}', '$1')) prefixes.update(self._interwikimap.get_by_url(url)) if not prefixes: raise KeyError( diff --git a/tests/interwikimap_tests.py b/tests/interwikimap_tests.py index 118243e..0219e47 100755 --- a/tests/interwikimap_tests.py +++ b/tests/interwikimap_tests.py @@ -152,6 +152,74 @@ self.iw_map[prefix] +class TestInterwikiPrefix(TestCase): + + """Test interwiki_prefix method with a dry interwiki map.""" + + dry = True + + sites = { + 'dewp': { + 'family': 'wikipedia', + 'code': 'de', + }, + 'enwp': { + 'family': 'wikipedia', + 'code': 'en', + }, + 'frwp': { + 'family': 'wikipedia', + 'code': 'fr', + }, + 'commons': { + 'family': 'commons', + 'code': 'commons', + }, + } + + interwikimap = [ + {'prefix': 'c', 'local': True, + 'url': 'https://commons.wikimedia.org/wiki/$1'}, + {'prefix': 'de', 'local': True, 'localinterwiki': True, + 'url': 'https://de.wikipedia.org/wiki/$1'}, + {'prefix': 'en', 'local': True, + 'url': 'https://en.wikipedia.org/wiki/$1'}, + {'prefix': 'w', 'local': True, + 'url': 'https://en.wikipedia.org/wiki/$1'}, + {'prefix': 'wikipedia', 'local': True, + 'url': 'https://en.wikipedia.org/wiki/$1'}, + {'prefix': 'wikipediawikipedia', 'local': True, + 'url': 'https://en.wikipedia.org/wiki/Wikipedia:$1'}, + ] + + @classmethod + def setUpClass(cls) -> None: + """Set up the article paths and the interwiki map.""" + super().setUpClass() + for key in cls.sites: + cls.get_site(key).siteinfo._cache['articlepath'] = ( + '/wiki/$1', True) + cls.get_site('dewp').siteinfo._cache['interwikimap'] = ( + cls.interwikimap, True) + + def test_interwiki_prefix(self) -> None: + """Test interwiki_prefix method.""" + site = self.get_site('dewp') + for key, prefixes in (('dewp', ['de']), + ('enwp', ['w', 'en', 'wikipedia']), + ('commons', ['c'])): + with self.subTest(site=key): + self.assertEqual( + site.interwiki_prefix(self.get_site(key)), prefixes) + + def test_no_interwiki_prefix(self) -> None: + """Test interwiki_prefix method without a prefix to the site.""" + site = self.get_site('dewp') + with self.assertRaisesRegex( + KeyError, "There is no interwiki prefix to 'wikipedia:fr'"): + site.interwiki_prefix(self.get_site('frwp')) + + if __name__ == '__main__': with suppress(SystemExit): unittest.main() -- To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1358406?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: I4e53091c6056b91e0654187952d71040fac6e110 Gerrit-Change-Number: 1358406 Gerrit-PatchSet: 2 Gerrit-Owner: AkashKumar7902 <[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]
