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

Reply via email to