jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] getLanguageLinks: Skip own site ......................................................................
[FIX] getLanguageLinks: Skip own site
When the text contains an langlink to its own site, it should be skipped as it is not an interwiki link.
Bug: T114608 Change-Id: I0856e198e817eac160b7f2682bffc9e65387ac6e --- M pywikibot/textlib.py M tests/textlib_tests.py 2 files changed, 41 insertions(+), 2 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py index 2b6c529..d80ca1a 100644 --- a/pywikibot/textlib.py +++ b/pywikibot/textlib.py @@ -735,7 +735,8 @@ """ Return a dict of inter-language links found in text.
- The returned dict uses language codes as keys and Page objects as values. + The returned dict uses the site as keys and Page objects as values. It does + not contain its own site.
Do not call this routine directly, use Page.interwiki() method instead. @@ -777,6 +778,9 @@ pagetitle = pagetitle[:pagetitle.index('|')] # we want the actual page objects rather than the titles site = pywikibot.Site(code=lang, fam=fam) + # skip language links to its own site + if site == insite: + continue try: result[site] = pywikibot.Page(site, pagetitle) except pywikibot.InvalidTitle: diff --git a/tests/textlib_tests.py b/tests/textlib_tests.py index 5e84526..f450455 100644 --- a/tests/textlib_tests.py +++ b/tests/textlib_tests.py @@ -23,7 +23,7 @@
from tests.aspects import ( unittest, require_modules, TestCase, DefaultDrySiteTestCase, - PatchingTestCase, + PatchingTestCase, SiteAttributeTestCase, )
files = {} @@ -1187,6 +1187,41 @@ r'X\g<bar>X')
+class TestGetLanguageLinks(SiteAttributeTestCase): + + """Test L{textlib.getLanguageLinks} function.""" + + sites = { + 'enwp': { + 'family': 'wikipedia', + 'code': 'en', + }, + 'dewp': { + 'family': 'wikipedia', + 'code': 'de', + }, + 'commons': { + 'family': 'commons', + 'code': 'commons', + }, + } + + example_text = '[[en:Site]] [[de:Site|Piped]] [[commons:Site]] [[baden:Site]]' + + @classmethod + def setUpClass(cls): + """Define set of valid targets for the example text.""" + super(TestGetLanguageLinks, cls).setUpClass() + cls.sites_set = set([cls.enwp, cls.dewp]) + + def test_getLanguageLinks(self, key): + """Test if the function returns the correct titles and sites.""" + lang_links = textlib.getLanguageLinks(self.example_text, self.site) + self.assertEqual(set(page.title() for page in lang_links.values()), + set(['Site'])) + self.assertEqual(set(lang_links), self.sites_set - set([self.site])) + + if __name__ == '__main__': try: unittest.main()
pywikibot-commits@lists.wikimedia.org