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 <jayvdb(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>