jenkins-bot has submitted this change and it was merged.
Change subject: standardize basic.py
......................................................................
standardize basic.py
* inherits from the Bot class
* does not override .run()
* uses .userPut() instead of the custom .save()
* -dry enables pywikibot.config.simulate
Change-Id: I3820cb381b3529a9ca894f71064ab1d161e95773
---
M pywikibot/bot.py
M scripts/basic.py
2 files changed, 32 insertions(+), 67 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index b6a5f7b..ddd866e 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -1108,6 +1108,9 @@
* 'show_diff' - show changes between oldtext and newtext (enabled)
* 'ignore_save_related_errors' - report and ignore (disabled)
* 'ignore_server_errors' - report and ignore (disabled)
+
+ @return: whether the page was saved successfully
+ @rtype: bool
"""
if oldtext == newtext:
pywikibot.output(u'No changes were needed on %s'
@@ -1125,7 +1128,7 @@
pywikibot.output(u'Edit summary: %s' % kwargs['summary'])
page.text = newtext
- self._save_page(page, page.save, **kwargs)
+ return self._save_page(page, page.save, **kwargs)
def _save_page(self, page, func, *args, **kwargs):
"""
@@ -1141,6 +1144,8 @@
@kwarg ignore_save_related_errors: if True, errors related to
page save will be reported and ignored (default: False)
@kwtype ignore_save_related_errors: bool
+ @return: whether the page was saved successfully
+ @rtype: bool
"""
if not self.user_confirm('Do you want to accept these changes?'):
return
@@ -1177,6 +1182,9 @@
raise
pywikibot.error(u'Server Error while processing %s: %s'
% (page.title(), e))
+ else:
+ return True
+ return False
def quit(self):
"""Cleanup and quit processing."""
diff --git a/scripts/basic.py b/scripts/basic.py
index 23dac2b..192d85f 100755
--- a/scripts/basic.py
+++ b/scripts/basic.py
@@ -16,7 +16,7 @@
"""
#
-# (C) Pywikibot team, 2006-2014
+# (C) Pywikibot team, 2006-2015
#
# Distributed under the terms of the MIT license.
#
@@ -26,8 +26,9 @@
#
import pywikibot
-from pywikibot import pagegenerators
-from pywikibot import i18n
+from pywikibot import i18n, pagegenerators, Bot
+
+from pywikibot.tools import issue_deprecation_warning
# This is required for the text that is shown when you run this script
# with the parameter -help.
@@ -36,7 +37,7 @@
}
-class BasicBot:
+class BasicBot(Bot):
"""An incomplete sample bot."""
@@ -44,29 +45,26 @@
# The file containing these messages should have the same name as the caller
# script (i.e. basic.py in this case)
- def __init__(self, generator, dry):
+ def __init__(self, generator, dry=False, **kwargs):
"""
Constructor.
- Parameters:
- @param generator: The page generator that determines on which pages
- to work.
- @type generator: generator.
- @param dry: If True, doesn't do any real changes, but only shows
- what would have been changed.
- @type dry: boolean.
+ @param generator: the page generator that determines on which pages
+ to work
+ @type generator: generator
+ @param dry: if True, doesn't do any real changes, but only shows
+ what would have been changed
+ @type dry: bool
"""
+ if dry:
+ issue_deprecation_warning('dry argument',
'pywikibot.config.simulate', 1)
+ pywikibot.config.simulate = True
+ super(BasicBot, self).__init__(**kwargs)
self.generator = generator
- self.dry = dry
# Set the edit summary message
site = pywikibot.Site()
self.summary = i18n.twtranslate(site, 'basic-changing')
-
- def run(self):
- """Process each page from the generator."""
- for page in self.generator:
- self.treat(page)
def treat(self, page):
"""Load the given page, does some changes, and saves
it."""
@@ -82,13 +80,13 @@
# Example: This puts the text 'Test' at the beginning of the page.
text = 'Test ' + text
- if not self.save(text, page, self.summary):
+ if not self.userPut(page, page.text, text, summary=self.summary,
+ ignore_save_related_errors=True):
pywikibot.output(u'Page %s not saved.' % page.title(asLink=True))
def load(self, page):
"""Load the text of the given page."""
try:
- # Load the page
text = page.get()
except pywikibot.NoPage:
pywikibot.output(u"Page %s does not exist; skipping."
@@ -99,42 +97,6 @@
else:
return text
return None
-
- def save(self, text, page, comment=None, minorEdit=True,
- botflag=True):
- """Update the given page with new text."""
- # only save if something was changed
- if text != page.get():
- # Show the title of the page we're working on.
- # Highlight the title in purple.
- pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default}
<<<"
- % page.title())
- # show what was changed
- pywikibot.showDiff(page.get(), text)
- pywikibot.output(u'Comment: %s' % comment)
- if not self.dry:
- if pywikibot.input_yn(
- u'Do you want to accept these changes?',
- default=False, automatic_quit=False):
- try:
- page.text = text
- # Save the page
- page.save(summary=comment or self.comment,
- minor=minorEdit, botflag=botflag)
- except pywikibot.LockedPage:
- pywikibot.output(u"Page %s is locked; skipping."
- % page.title(asLink=True))
- except pywikibot.EditConflict:
- pywikibot.output(
- u'Skipping %s because of edit conflict'
- % (page.title()))
- except pywikibot.SpamfilterError as error:
- pywikibot.output(
- u'Cannot change %s because of spam blacklist entry
%s'
- % (page.title(), error.url))
- else:
- return True
- return False
def main(*args):
@@ -153,26 +115,21 @@
# that are also used by other scripts and that determine on which pages
# to work on.
genFactory = pagegenerators.GeneratorFactory()
- # The generator gives the pages that should be worked upon.
- gen = None
- # If dry is True, doesn't do any real changes, but only show
- # what would have been changed.
- dry = False
# Parse command line arguments
for arg in local_args:
- if arg.startswith("-dry"):
- dry = True
+ if arg == '-dry':
+ issue_deprecation_warning('-dry option', '-simulate', 1)
+ pywikibot.config.simulate = True
else:
genFactory.handleArg(arg)
- if not gen:
- gen = genFactory.getCombinedGenerator()
+ gen = genFactory.getCombinedGenerator()
if gen:
# The preloading generator is responsible for downloading multiple
# pages from the wiki simultaneously.
gen = pagegenerators.PreloadingGenerator(gen)
- bot = BasicBot(gen, dry)
+ bot = BasicBot(gen)
bot.run()
else:
pywikibot.showHelp()
--
To view, visit
https://gerrit.wikimedia.org/r/181717
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3820cb381b3529a9ca894f71064ab1d161e95773
Gerrit-PatchSet: 14
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <ricordisamoa(a)openmailbox.org>
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: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>