jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] replace: Support callable as replacement ......................................................................
[FIX] replace: Support callable as replacement
Before 7a98d58f the replace script supports callables as a replacement when using a fix. But that patch it expected an iterable. This disables the check for invisible characters when the replacement is a callable.
Change-Id: I1d64ba6d456a08a3da5662b66002ab5c417b61ce --- M scripts/replace.py M tests/data/fixes.py M tests/replacebot_tests.py 3 files changed, 18 insertions(+), 2 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/scripts/replace.py b/scripts/replace.py index 529c4da..6c5e97c 100755 --- a/scripts/replace.py +++ b/scripts/replace.py @@ -979,7 +979,8 @@ pywikibot.warning('The old string "{0}" contains formatting ' 'characters like U+200E'.format( chars.replace_invisible(replacement[0]))) - if chars.contains_invisible(replacement[1]): + if (not callable(replacement[1]) and + chars.contains_invisible(replacement[1])): pywikibot.warning('The new string "{0}" contains formatting ' 'characters like U+200E'.format( chars.replace_invisible(replacement[1]))) diff --git a/tests/data/fixes.py b/tests/data/fixes.py index 5c2fd0e..fcdf8c1 100644 --- a/tests/data/fixes.py +++ b/tests/data/fixes.py @@ -70,3 +70,10 @@ ('1', '2'), ] } + +fixes['no-msg-callable'] = { + 'regex': False, + 'replacements': [ + ('1', lambda match: str(match.start())), + ] +} diff --git a/tests/replacebot_tests.py b/tests/replacebot_tests.py index cf3858f..03aee98 100644 --- a/tests/replacebot_tests.py +++ b/tests/replacebot_tests.py @@ -110,7 +110,8 @@ """Test a replacement from the command line.""" self.assertIsInstance(replacement, clazz) self.assertEqual(replacement.old, str(offset * 2 + 1)) - self.assertEqual(replacement.new, str(offset * 2 + 2)) + if not callable(replacement.new): + self.assertEqual(replacement.new, str(offset * 2 + 2))
def _test_fix_replacement(self, replacement, length=1, offset=0, msg=False): """Test a replacement from a fix.""" @@ -230,6 +231,13 @@ self._apply(bot, 'Hello 2', title='Allowed') self._apply(bot, 'Hello 1', missing=True, title='Allowed Declined')
+ def test_fix_callable(self): + """Test fix replacements using a callable.""" + bot = self._get_bot(True, '-fix:no-msg-callable') + self.assertEqual(len(bot.replacements), 1) + self._test_fix_replacement(bot.replacements[0]) + self.assertTrue(callable(bot.replacements[0].new)) +
if __name__ == '__main__': try:
pywikibot-commits@lists.wikimedia.org