Xqt has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/334904 )
Change subject: [IMPR] some improvements vor vandalism closing bot ...................................................................... [IMPR] some improvements vor vandalism closing bot - re.I for isIn function - exceptionfor ValueError in userIsExperienced method - use caseInsensitive for replaceExcept changing vmHead to replace lowercased IP6 user entries - enlarge timeout for rc_listener - fix some misspelling errors - some tests added This should solve https://de.wikipedia.org/w/index.php?title=Benutzer_Diskussion:Xqt&oldid=162107310#fehlende_.22erl..22-Markierung Change-Id: I89c8f943f625a993d8036fbf3969a52440dc62a5 --- M tests/vandalism_tests.py M vandalism.py 2 files changed, 46 insertions(+), 13 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/bots/xqbot refs/changes/04/334904/1 diff --git a/tests/vandalism_tests.py b/tests/vandalism_tests.py index 0b9d1ef..4e5ffb8 100644 --- a/tests/vandalism_tests.py +++ b/tests/vandalism_tests.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test vandalism modules.""" # -# (C) xqt, 2015-2016 +# (C) xqt, 2015-2017 # # Distributed under the terms of the MIT license. # @@ -9,10 +9,12 @@ __version__ = '$Id$' +import re + import unittest from tests import utils # noqa -from vandalism import getAccuser +from vandalism import getAccuser, vmHeadlineRegEx, isIn class TestVandalismMethods(unittest.TestCase): @@ -33,23 +35,23 @@ '11:46, 15. Nov. 2011 (CET) baz'), ('xqt', '2011 Nov 15 11:46')) self.assertEqual(getAccuser( - 'foo bar ([[Benutzerin:xqt|Xqt]]) ' + 'foo [[Benutzerin:xqt|Xqt]] bar ' '11:46, 15. Nov. 2012 (CET) baz'), ('xqt', '2012 Nov 15 11:46')) self.assertEqual(getAccuser( - 'foo bar ([[benutzerin:xqt|xqt]]) ' + 'foo bar [[benutzerin:xqt|xqt]] ' '11:46, 15. Nov. 2013 (CET) baz'), ('xqt', '2013 Nov 15 11:46')) self.assertEqual(getAccuser( - 'foo bar ([[benutzerin:xqt|xqt]]) ' + 'foo bar [[benutzerin:xqt|xqt]] ' '11:46, 15. Mai 2014 (CEST)'), ('xqt', '2014 Mai 15 11:46')) self.assertEqual(getAccuser( - 'foo bar ([[user:Xqt|xqt]]) ' + 'foo bar [[user:Xqt|xqt]] ' '11:46, 15. Apr. 2015 (CEST) baz'), ('Xqt', '2015 Apr 15 11:46')) self.assertEqual(getAccuser( - 'foo bar ([[User_talk:xqt|Xqt]]) ' + 'foo bar [[User_talk:xqt|Xqt]] ' '11:46, 15. Nov. 2016 (CEST)'), ('xqt', '2016 Nov 15 11:46')) self.assertEqual(getAccuser( @@ -61,6 +63,31 @@ '11:46, 15. Nov. 2018 (CET) baz'), ('xqt', '2018 Nov 15 11:46')) + def test_vmHeadlineRegEx(self): + """Test vmHeadlineRegEx.""" + self.assertIsNotNone(isIn('== [[Benutzer:Xqt1]] ==', + re.escape('Xqt1'))) + self.assertIsNotNone(isIn('== [[Benutzer:xqt2]] ==', + re.escape('Xqt2'))) + self.assertIsNotNone(isIn('== [[Benutzerin:Xqt3]] ==', + re.escape('Xqt3'))) + self.assertIsNotNone(isIn('== [[User:Xqt4]] ==', + re.escape('Xqt4'))) + self.assertIsNotNone(isIn('== [[user:Xqt5]] ==', + re.escape('Xqt5'))) + self.assertIsNotNone(isIn('== [[user:Xqt5]] ==', + re.escape('Xqt5'))) + self.assertIsNotNone(isIn('== [[Benutzer:77.7.117.89]] ==', + re.escape('77.7.117.89'))) + self.assertIsNotNone(isIn('== [[Benutzer:77.7.117.89]] ==', + re.escape('77.7.117.89'))) + self.assertIsNotNone(isIn( + '== [[Benutzer:2003:D3:83C0:CB00:45F1:1850:1E89:1E22]] ==', + re.escape('2003:D3:83C0:CB00:45F1:1850:1E89:1E22'))) + self.assertIsNotNone(isIn( + '== [[Benutzer:2003:d3:83c0:cb00:45f1:1850:1e89:1e22]] ==', + re.escape('2003:D3:83C0:CB00:45F1:1850:1E89:1E22'))) + if __name__ == '__main__': try: diff --git a/vandalism.py b/vandalism.py index bcdf62f..f20ad71 100644 --- a/vandalism.py +++ b/vandalism.py @@ -10,7 +10,7 @@ """ # # (C) Euku, 2009-2013 -# (C) xqt, 2013-2016 +# (C) xqt, 2013-2017 # from __future__ import absolute_import, print_function, unicode_literals @@ -55,7 +55,8 @@ def isIn(text, regex): """Search regex in text.""" - return re.search(regex, text, re.UNICODE) + # re.IGNORECASE to enable lowercased IP + return re.search(regex, text, re.UNICODE | re.IGNORECASE) def search(text, regex): @@ -66,10 +67,10 @@ def divideIntoSlices(rawText): """ - Anlalyze text. + Analyze text. Analyze the whole text to get the intro, the headlines and the - corresponding bodies + corresponding bodies. """ textLines = rawText.split("\n") @@ -202,6 +203,10 @@ user = pywikibot.User(self.site, username) except pywikibot.InvalidTitle: pywikibot.exception() + return False + except ValueError: + pywikibot.exception() + # TODO: convert to a valid User. In this case I found a user Talk page return False return user.editCount() >= self.useredits @@ -346,7 +351,8 @@ vmHeads[i] = textlib.replaceExcept( vmHeads[i], vmHeadlineRegEx % regExUserName, "\\1 (%s) ==" % self.vmHeadNote, - ['comment', 'nowiki', 'source']) # for the headline + ['comment', 'nowiki', 'source'], # for the headline + caseInsensitive=True) vmBodies[i] += newLine + "\n" # was something changed? @@ -541,7 +547,7 @@ def run(self): """Run the bot.""" starttime = time() - rc_listener = site_rc_listener(self.site, timeout=60) + rc_listener = site_rc_listener(self.site, timeout=100) while True: pywikibot.output(Timestamp.now().strftime(">> %H:%M:%S: ")) self.read_lists() -- To view, visit https://gerrit.wikimedia.org/r/334904 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I89c8f943f625a993d8036fbf3969a52440dc62a5 Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/bots/xqbot Gerrit-Branch: master Gerrit-Owner: Xqt <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
