jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/491790 )
Change subject: [IMPR] Fix handling of interlanguage links in replace_links
......................................................................
[IMPR] Fix handling of interlanguage links in replace_links
- fix iw link detection and allow to replace interlanguage links
(starting with ':')
- until now replace_links made [[:en:Foo]] > [[Bar]] for (:en:Foo >
:en:Bar)
- extracted from
https://gerrit.wikimedia.org/r/#/c/pywikibot/core/+/491673/
Change-Id: Ie1cf22dd3f22129fe5edd20fc9713646912a678a
---
M pywikibot/textlib.py
M tests/textlib_tests.py
2 files changed, 54 insertions(+), 5 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py
index 1c71ed1..1a5f85c 100644
--- a/pywikibot/textlib.py
+++ b/pywikibot/textlib.py
@@ -710,10 +710,15 @@
m = link_pattern.search(text, pos=curpos)
if not m:
break
- # ignore links to sections of the same page
+ # Ignore links to sections of the same page
if not m.group('title').strip():
curpos = m.end()
continue
+ # Ignore interwiki links
+ if (site.isInterwikiLink(m.group('title').strip())
+ and not m.group('title').strip().startswith(':')):
+ curpos = m.end()
+ continue
groups = m.groupdict()
if groups['label'] and '[[' in groups['label']:
# TODO: Work on the link within the label too
@@ -740,10 +745,6 @@
# unrecognized iw prefix
curpos = end
continue
- # ignore interwiki links
- if link.site != site:
- curpos = end
- continue
# Check whether the link found should be replaced.
# Either None, False or tuple(Link, bool)
@@ -792,6 +793,9 @@
is_link = False
new_title = new_link.canonical_title()
+ # Make correct langlink if needed
+ if not new_link.site == site:
+ new_title = ':' + new_link.site.code + ':' + new_title
if is_link:
# Use link's label
diff --git a/tests/textlib_tests.py b/tests/textlib_tests.py
index 6b754da..2c6e7b0 100644
--- a/tests/textlib_tests.py
+++ b/tests/textlib_tests.py
@@ -1060,6 +1060,51 @@
ValueError, r'unicode \(str.*bytes \(str',
textlib.replace_links, self.text, callback, self.wp_site)
+ def test_replace_interwiki_links(self):
+ """Make sure interwiki links can not be
replaced."""
+ link = '[[fr:how]]'
+ self.assertEqual(
+ textlib.replace_links(link, ('fr:how', 'de:are'),
self.wp_site),
+ link)
+ self.assertEqual(
+ textlib.replace_links(link, (':fr:how', ':de:are'),
self.wp_site),
+ link)
+ self.assertEqual(
+ textlib.replace_links(link, ('how', 'de:are'),
self.wp_site),
+ link)
+ self.assertEqual(
+ textlib.replace_links(link, ('de:how', 'de:are'),
self.wp_site),
+ link)
+
+
+class TestReplaceLinksNonDry(TestCase):
+ """Test the replace_links function in textlib
non-dry."""
+
+ family = 'wikipedia'
+ code = 'en'
+
+ cached = True
+
+ def test_replace_interlanguage_links(self):
+ """Test replacing interlanguage links."""
+ link = '[[:fr:how]]'
+ self.assertEqual(
+ textlib.replace_links(link, (':fr:how', ':de:are'),
+ self.wp_site),
+ '[[:de:are]]')
+ self.assertEqual(
+ textlib.replace_links(link, ('fr:how', 'de:are'),
+ self.wp_site),
+ '[[:de:are]]')
+ self.assertEqual(
+ textlib.replace_links(link, ('how', ':de:are'),
+ self.wp_site),
+ link)
+ self.assertEqual(
+ textlib.replace_links(link, (':de:how', ':de:are'),
+ self.wp_site),
+ link)
+
class TestLocalDigits(TestCase):
--
To view, visit
https://gerrit.wikimedia.org/r/491790
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie1cf22dd3f22129fe5edd20fc9713646912a678a
Gerrit-Change-Number: 491790
Gerrit-PatchSet: 7
Gerrit-Owner: Dvorapa <dvorapa(a)seznam.cz>
Gerrit-Reviewer: D3r1ck01 <alangiderick(a)gmail.com>
Gerrit-Reviewer: Dalba <dalba.wiki(a)gmail.com>
Gerrit-Reviewer: Dvorapa <dvorapa(a)seznam.cz>
Gerrit-Reviewer: Framawiki <framawiki(a)tools.wmflabs.org>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: Zhuyifei1999 <zhuyifei1999(a)gmail.com>
Gerrit-Reviewer: jenkins-bot (75)