[MediaWiki-commits] [Gerrit] Subclass ReplaceRobot - change (pywikibot/core)

2015-05-31 Thread jenkins-bot (Code Review)
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)

2015-04-19 Thread John Vandenberg (Code Review)
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))