[MediaWiki-commits] [Gerrit] Subclass ReplaceRobot - change (pywikibot/core)
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
[MediaWiki-commits] [Gerrit] Subclass ReplaceRobot - change (pywikibot/core)
John Vandenberg has uploaded a new change for review. https://gerrit.wikimedia.org/r/205079 Change subject: Subclass ReplaceRobot .. Subclass ReplaceRobot Change-Id: I687fcfb2f06872a91d5fe999acdac8557e0c0ede --- M pywikibot/bot.py M scripts/image.py M scripts/replace.py M scripts/template.py 4 files changed, 32 insertions(+), 30 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/79/205079/1 diff --git a/pywikibot/bot.py b/pywikibot/bot.py index 446e8e1..0d9c886 100644 --- a/pywikibot/bot.py +++ b/pywikibot/bot.py @@ -1001,12 +1001,17 @@ @param kwargs: bot options @type kwargs: dict -if 'generator' in kwargs: +if 'generator' in kwargs and kwargs['generator']: self.generator = kwargs.pop('generator') self.setOptions(**kwargs) -self._site = None -self._sites = set() + +if 'site' in kwargs: +self._site = kwargs.pop('site') +else: +self._site = None +self._sites = set([self._site] if self._site else []) + self._treat_counter = 0 self._save_counter = 0 diff --git a/scripts/image.py b/scripts/image.py index 16026c3..abeea03 100755 --- a/scripts/image.py +++ b/scripts/image.py @@ -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 import replace + + +class ImageRobot(replace.ReplaceRobot): 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, + acceptall=self.getOption('always'), + summary=self.getOption('summary')) def main(*args): diff --git a/scripts/replace.py b/scripts/replace.py index 19a7855..e1b8876 100755 --- a/scripts/replace.py +++ b/scripts/replace.py @@ -458,8 +458,6 @@ self.acceptall = acceptall self.allowoverlap = allowoverlap self.recursive = recursive -if site: -self.site = site if addedCat: cat_ns = site.category_namespaces()[0] self.addedCat = pywikibot.Page(self.site, diff --git a/scripts/template.py b/scripts/template.py index 999b22f..a8a2283 100755 --- a/scripts/template.py +++ b/scripts/template.py @@ -111,8 +111,11 @@ # import re + import pywikibot + from pywikibot import i18n, pagegenerators, xmlreader, Bot + from scripts import replace @@ -193,7 +196,7 @@ yield page -class TemplateRobot(Bot): +class TemplateRobot(replace.ReplaceRobot): This bot will replace, remove or subst all occurrences of a template. @@ -214,13 +217,11 @@ 'summary': None, 'addedCat': None, }) -super(TemplateRobot, self).__init__(**kwargs) -self.generator = generator +Bot.__init__(self, generator=generator, **kwargs) +site = self.site + 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') @@ -238,8 +239,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 +282,11 @@ replacements.append((templateRegex, r'{{%s\gparameters}}' % new))