jenkins-bot has submitted this change and it was merged. Change subject: Subclass ReplaceRobot ......................................................................
Subclass ReplaceRobot Update image and template bots to be simple subclasses of the replace bot. Bot superclass can now accept a site parameter. Update replace bot __init__ to accept standard 'always' argument instead of now deprecated 'acceptall'. Change-Id: I687fcfb2f06872a91d5fe999acdac8557e0c0ede --- M pywikibot/bot.py M scripts/image.py M scripts/replace.py M scripts/template.py 4 files changed, 50 insertions(+), 42 deletions(-) Approvals: John Vandenberg: Looks good to me, but someone else must approve Ricordisamoa: Looks good to me, approved jenkins-bot: Verified diff --git a/pywikibot/bot.py b/pywikibot/bot.py index b319e3c..57e4721 100644 --- a/pywikibot/bot.py +++ b/pywikibot/bot.py @@ -1004,9 +1004,13 @@ if 'generator' in kwargs: self.generator = kwargs.pop('generator') + # TODO: add warning if site is specified and generator + # contains pages from a different site. + self._site = kwargs.pop('site', None) + self._sites = set([self._site] if self._site else []) + self.setOptions(**kwargs) - self._site = None - self._sites = set() + self._treat_counter = 0 self._save_counter = 0 @@ -1193,6 +1197,7 @@ """Site that the bot is using.""" if not self._site: warning('Bot.site was not set before being retrieved.') + # TODO: peak at a page from the generator to determine the site self.site = pywikibot.Site() warning('Using the default site: %s' % self.site) return self._site diff --git a/scripts/image.py b/scripts/image.py index 16026c3..d7b61a2 100755 --- a/scripts/image.py +++ b/scripts/image.py @@ -35,7 +35,7 @@ """ # -# (C) Pywikibot team, 2013-2014 +# (C) Pywikibot team, 2013-2015 # # Distributed under the terms of the MIT license. # @@ -43,13 +43,16 @@ __version__ = '$Id$' # -import pywikibot -import replace -from pywikibot import i18n, pagegenerators, Bot import re +import pywikibot -class ImageRobot(Bot): +from pywikibot import i18n, pagegenerators, Bot + +from scripts.replace import ReplaceRobot as ReplaceBot + + +class ImageRobot(ReplaceBot): """This bot will replace or remove all occurrences of an old image.""" @@ -113,9 +116,9 @@ 'summary': None, 'loose': False, }) - super(ImageRobot, self).__init__(**kwargs) - self.generator = generator + Bot.__init__(self, generator=generator, **kwargs) + self.old_image = old_image self.new_image = new_image @@ -126,8 +129,6 @@ else self.old_image, fallback=True) - def run(self): - """Start the bot's action.""" # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. @@ -164,10 +165,9 @@ else: replacements.append((image_regex, '')) - replaceBot = replace.ReplaceRobot(self.generator, replacements, - acceptall=self.getOption('always'), - summary=self.getOption('summary')) - replaceBot.run() + super(ImageRobot, self).__init__(self.generator, replacements, + always=self.getOption('always'), + summary=self.getOption('summary')) def main(*args): diff --git a/scripts/replace.py b/scripts/replace.py index 73c73aa..b3f6470 100755 --- a/scripts/replace.py +++ b/scripts/replace.py @@ -139,13 +139,14 @@ import sys import pywikibot + from pywikibot import i18n, textlib, pagegenerators, Bot from pywikibot import editor as editarticle # Imports predefined replacements tasks from fixes.py from pywikibot import fixes -from pywikibot.tools import chars +from pywikibot.tools import chars, deprecated_args if sys.version_info[0] > 2: basestring = (str, ) @@ -405,9 +406,10 @@ """A bot that can do text replacements.""" + @deprecated_args(acceptall='always') def __init__(self, generator, replacements, exceptions={}, - acceptall=False, allowoverlap=False, recursive=False, - addedCat=None, sleep=None, summary='', site=None): + always=False, allowoverlap=False, recursive=False, + addedCat=None, sleep=None, summary='', **kwargs): """ Constructor. @@ -419,7 +421,7 @@ string). * exceptions - A dictionary which defines when not to change an occurrence. See below. - * acceptall - If True, the user won't be prompted before changes + * always - If True, the user won't be prompted before changes are made. * allowoverlap - If True, when matches overlap, all of them are replaced. @@ -446,7 +448,10 @@ exceptionRegexes dictionary in textlib.replaceExcept(). """ - super(ReplaceRobot, self).__init__(generator=generator) + super(ReplaceRobot, self).__init__(generator=generator, + always=always, + **kwargs) + for i, replacement in enumerate(replacements): if isinstance(replacement, collections.Sequence): if len(replacement) != 2: @@ -458,11 +463,9 @@ replacement[1]) self.replacements = replacements self.exceptions = exceptions - self.acceptall = acceptall + self.acceptall = always # deprecated self.allowoverlap = allowoverlap self.recursive = recursive - if site: - self.site = site if addedCat: if isinstance(addedCat, pywikibot.Category): @@ -613,7 +616,7 @@ pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title()) pywikibot.showDiff(original_text, new_text) - if self.acceptall: + if self.getOption('always'): break choice = pywikibot.input_choice( u'Do you want to accept these changes?', @@ -638,12 +641,12 @@ new_text = original_text continue if choice == 'a': - self.acceptall = True + self.options['always'] = True if choice == 'y': page.put_async(new_text, self.generate_summary(applied), callback=self.count_changes) # choice must be 'N' break - if self.acceptall and new_text != original_text: + if self.getOption('always') and new_text != original_text: try: page.put(new_text, self.generate_summary(applied), callback=self.count_changes) except pywikibot.EditConflict: diff --git a/scripts/template.py b/scripts/template.py index 999b22f..8b09314 100755 --- a/scripts/template.py +++ b/scripts/template.py @@ -111,9 +111,12 @@ # import re + import pywikibot + from pywikibot import i18n, pagegenerators, xmlreader, Bot -from scripts import replace + +from scripts.replace import ReplaceRobot as ReplaceBot def UserEditFilterGenerator(generator, username, timestamp=None, skip=False, @@ -193,7 +196,7 @@ yield page -class TemplateRobot(Bot): +class TemplateRobot(ReplaceBot): """This bot will replace, remove or subst all occurrences of a template.""" @@ -214,20 +217,19 @@ 'summary': None, 'addedCat': None, }) - super(TemplateRobot, self).__init__(**kwargs) - self.generator = generator + Bot.__init__(self, generator=generator, **kwargs) + self.templates = templates - site = pywikibot.Site() - if self.getOption('addedCat'): - self.options['addedCat'] = pywikibot.Category(site, self.getOption('addedCat')) - - comma = site.mediawiki_message('comma-separator') # get edit summary message if it's empty if not self.getOption('summary'): + comma = self.site.mediawiki_message('comma-separator') params = {'list': comma.join(self.templates.keys()), 'num': len(self.templates)} + + site = self.site + if self.getOption('remove'): self.options['summary'] = i18n.twntranslate( site, 'template-removing', params) @@ -238,8 +240,6 @@ self.options['summary'] = i18n.twntranslate( site, 'template-changing', params) - def run(self): - """Start the robot's action.""" # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. @@ -283,11 +283,11 @@ replacements.append((templateRegex, r'{{%s\g<parameters>}}' % new)) - replaceBot = replace.ReplaceRobot(self.generator, replacements, - exceptions, acceptall=self.getOption('always'), - addedCat=self.getOption('addedCat'), - summary=self.getOption('summary')) - replaceBot.run() + super(TemplateRobot, self).__init__( + generator, replacements, exceptions, + always=self.getOption('always'), + addedCat=self.getOption('addedCat'), + summary=self.getOption('summary')) def main(*args): -- To view, visit https://gerrit.wikimedia.org/r/205079 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I687fcfb2f06872a91d5fe999acdac8557e0c0ede Gerrit-PatchSet: 13 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: John Vandenberg <jay...@gmail.com> Gerrit-Reviewer: John Vandenberg <jay...@gmail.com> Gerrit-Reviewer: Ladsgroup <ladsgr...@gmail.com> Gerrit-Reviewer: Merlijn van Deen <valhall...@arctus.nl> Gerrit-Reviewer: Mpaa <mpaa.w...@gmail.com> Gerrit-Reviewer: Ricordisamoa <ricordisa...@openmailbox.org> Gerrit-Reviewer: XZise <commodorefabia...@gmx.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits