Revision: 6193
Author: russblau
Date: 2008-12-23 19:50:21 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Convert replace.py to work under new framework.
Modified Paths:
--------------
branches/rewrite/pywikibot/scripts/fixes.py
branches/rewrite/pywikibot/scripts/replace.py
Modified: branches/rewrite/pywikibot/scripts/fixes.py
===================================================================
--- branches/rewrite/pywikibot/scripts/fixes.py 2008-12-23 19:49:57 UTC (rev 6192)
+++ branches/rewrite/pywikibot/scripts/fixes.py 2008-12-23 19:50:21 UTC (rev 6193)
@@ -523,7 +523,7 @@
(u'Special:Listgrouprights', u'Special:ListGroupRights'),
(u'Special:Listusers', u'Special:ListUsers'),
(u'Special:Newimages', u'Special:NewImages'),
- (u'Special:Prefixindex', u'Special:PrefixIndex'),
+ (u'Special:Prefixindex', u'Special:PrefixIndex'),
(u'Special:Protectedpages', u'Special:ProtectedPages'),
(u'Special:Recentchanges', u'Special:RecentChanges'),
(u'Special:Specialpages', u'Special:SpecialPages'),
@@ -538,9 +538,9 @@
#
# Load the user fixes file.
-import config
+from pywikibot import config
try:
- execfile(config.datafilepath(config.base_dir, "user-fixes.py"))
+ execfile(config.datafilepath("user-fixes.py"))
except IOError:
pass
Modified: branches/rewrite/pywikibot/scripts/replace.py
===================================================================
--- branches/rewrite/pywikibot/scripts/replace.py 2008-12-23 19:49:57 UTC (rev 6192)
+++ branches/rewrite/pywikibot/scripts/replace.py 2008-12-23 19:50:21 UTC (rev 6193)
@@ -115,12 +115,13 @@
from __future__ import generators
import sys, re, time
-import wikipedia, pagegenerators, catlib, config
-import editarticle
+import pywikibot
+from pywikibot import pagegenerators, catlib, config
+# import editarticle
import webbrowser
# Imports predefined replacements tasks from fixes.py
-import fixes
+import pywikibot.scripts.fixes as fixes
# This is required for the text that is shown when you run this script
# with the parameter -help.
@@ -197,7 +198,7 @@
if self.exceptions.has_key('inside'):
self.excsInside += self.exceptions['inside']
import xmlreader
- self.site = wikipedia.getSite()
+ self.site = pywikibot.getSite()
dump = xmlreader.XmlDump(self.xmlFilename)
self.parser = dump.parse()
@@ -212,13 +213,13 @@
and not self.isTextExcepted(entry.text):
new_text = entry.text
for old, new in self.replacements:
- new_text = wikipedia.replaceExcept(new_text, old, new,
self.excsInside, self.site)
+ new_text = pywikibot.replaceExcept(new_text, old, new,
self.excsInside, self.site)
if new_text != entry.text:
- yield wikipedia.Page(self.site, entry.title)
+ yield pywikibot.Page(self.site, entry.title)
except KeyboardInterrupt:
try:
if not self.skipping:
- wikipedia.output(
+ pywikibot.output(
u'To resume, use "-xmlstart:%s" on the command
line.'
% entry.title)
except NameError:
@@ -250,7 +251,7 @@
"""
def __init__(self, generator, replacements, exceptions={},
acceptall=False, allowoverlap=False, recursive=False,
- addedCat=None, sleep=None):
+ addedCat=None, sleep=None, summary=''):
"""
Arguments:
* generator - A generator that yields Page objects.
@@ -282,7 +283,7 @@
regular expressions.
inside-tags
A list of strings. These strings must be keys from the
- exceptionRegexes dictionary in wikipedia.replaceExcept().
+ exceptionRegexes dictionary in pywikibot.replaceExcept().
"""
self.generator = generator
@@ -292,11 +293,12 @@
self.allowoverlap = allowoverlap
self.recursive = recursive
if addedCat:
- site = wikipedia.getSite()
+ site = pywikibot.getSite()
cat_ns = site.category_namespaces()[0]
- self.addedCat = wikipedia.Page(site,
+ self.addedCat = pywikibot.Page(site,
cat_ns + ':' + addedCat)
self.sleep = sleep
+ self.summary = summary
def isTitleExcepted(self, title):
"""
@@ -337,7 +339,7 @@
for old, new in self.replacements:
if self.sleep != None:
time.sleep(self.sleep)
- new_text = wikipedia.replaceExcept(new_text, old, new, exceptions,
+ new_text = pywikibot.replaceExcept(new_text, old, new, exceptions,
allowoverlap=self.allowoverlap)
return new_text
@@ -349,7 +351,7 @@
# changed.
for page in self.generator:
if self.isTitleExcepted(page.title()):
- wikipedia.output(
+ pywikibot.output(
u'Skipping %s because the title is on the exceptions list.'
% page.aslink())
continue
@@ -357,22 +359,22 @@
# Load the page's text from the wiki
original_text = page.get(get_redirect=True)
if not page.canBeEdited():
- wikipedia.output(u"You can't edit page %s"
+ pywikibot.output(u"You can't edit page %s"
% page.aslink())
continue
- except wikipedia.NoPage:
- wikipedia.output(u'Page %s not found' % page.aslink())
+ except pywikibot.NoPage:
+ pywikibot.output(u'Page %s not found' % page.aslink())
continue
new_text = original_text
while True:
if self.isTextExcepted(new_text):
- wikipedia.output(
+ pywikibot.output(
u'Skipping %s because it contains text that is on the exceptions list.'
% page.aslink())
break
new_text = self.doReplacements(new_text)
if new_text == original_text:
- wikipedia.output('No changes were necessary in %s'
+ pywikibot.output('No changes were necessary in %s'
% page.aslink())
break
if self.recursive:
@@ -384,16 +386,16 @@
cats = page.categories(nofollow_redirects=True)
if self.addedCat not in cats:
cats.append(self.addedCat)
- new_text = wikipedia.replaceCategoryLinks(new_text,
+ new_text = pywikibot.replaceCategoryLinks(new_text,
cats)
# Show the title of the page we're working on.
# Highlight the title in purple.
- wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default}
<<<"
+ pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default}
<<<"
% page.title())
- wikipedia.showDiff(original_text, new_text)
+ pywikibot.showDiff(original_text, new_text)
if self.acceptall:
break
- choice = wikipedia.inputChoice(
+ choice = pywikibot.inputChoice(
u'Do you want to accept these changes?',
['Yes', 'No', 'Edit', 'open in
Browser', 'All', "Quit"],
['y', 'N', 'e', 'b',
'a', 'q'], 'N')
@@ -409,7 +411,7 @@
page.site().hostname(),
page.site().nice_get_address(page.title())
))
- wikipedia.input("Press Enter when finished in browser.")
+ pywikibot.input("Press Enter when finished in browser.")
original_text = page.get(get_redirect=True, force=True)
new_text = original_text
continue
@@ -418,24 +420,24 @@
if choice == 'a':
self.acceptall = True
if choice == 'y':
- page.put_async(new_text)
+ page.put_async(new_text, self.summary)
# choice must be 'N'
break
if self.acceptall and new_text != original_text:
try:
- page.put(new_text)
- except wikipedia.EditConflict:
- wikipedia.output(u'Skipping %s because of edit conflict'
+ page.put(new_text, self.summary)
+ except pywikibot.EditConflict:
+ pywikibot.output(u'Skipping %s because of edit conflict'
% (page.title(),))
- except wikipedia.SpamfilterError, e:
- wikipedia.output(
+ except pywikibot.SpamfilterError, e:
+ pywikibot.output(
u'Cannot change %s because of blacklist entry %s'
% (page.title(), e.url))
- except wikipedia.PageNotSaved, error:
- wikipedia.output(u'Error putting page: %s'
+ except pywikibot.PageNotSaved, error:
+ pywikibot.output(u'Error putting page: %s'
% (error.args,))
- except wikipedia.LockedPage:
- wikipedia.output(u'Skipping %s (locked page)'
+ except pywikibot.LockedPage:
+ pywikibot.output(u'Skipping %s (locked page)'
% (page.title(),))
def prepareRegexForMySQL(pattern):
@@ -450,11 +452,12 @@
return pattern
-def main():
+def main(*args):
add_cat = None
gen = None
# summary message
- summary_commandline = None
+ summary_commandline = False
+ edit_summary = u""
# Array which will collect commandline parameters.
# First element is original text, second element is replacement text.
commandline_replacements = []
@@ -495,26 +498,23 @@
# that are also used by other scripts and that determine on which pages
# to work on.
genFactory = pagegenerators.GeneratorFactory()
- # Load default summary message.
- # BUG WARNING: This is probably incompatible with the -lang parameter.
- wikipedia.setAction(wikipedia.translate(wikipedia.getSite(), msg))
# Between a regex and another (using -fix) sleep some time (not to waste
# too much CPU
sleep = None
# Read commandline parameters.
- for arg in wikipedia.handleArgs():
+ for arg in pywikibot.handleArgs(*args):
if arg == '-regex':
regex = True
elif arg.startswith('-xmlstart'):
if len(arg) == 9:
- xmlStart = wikipedia.input(
+ xmlStart = pywikibot.input(
u'Please enter the dumped article to start with:')
else:
xmlStart = arg[10:]
elif arg.startswith('-xml'):
if len(arg) == 4:
- xmlFilename = wikipedia.input(
+ xmlFilename = pywikibot.input(
u'Please enter the XML dump\'s filename:')
else:
xmlFilename = arg[5:]
@@ -522,7 +522,7 @@
useSql = True
elif arg.startswith('-page'):
if len(arg) == 5:
- PageTitles.append(wikipedia.input(
+ PageTitles.append(pywikibot.input(
u'Which page do you want to change?'))
else:
PageTitles.append(arg[6:])
@@ -554,7 +554,7 @@
except ValueError:
namespaces.append(arg[11:])
elif arg.startswith('-summary:'):
- wikipedia.setAction(arg[9:])
+ edit_summary = arg[9:]
summary_commandline = True
elif arg.startswith('-allowoverlap'):
allowoverlap = True
@@ -566,68 +566,69 @@
commandline_replacements.append(arg)
if (len(commandline_replacements) % 2):
- raise wikipedia.Error, 'require even number of replacements.'
+ raise pywikibot.Error, 'require even number of replacements.'
elif (len(commandline_replacements) == 2 and fix == None):
replacements.append((commandline_replacements[0],
commandline_replacements[1]))
- if summary_commandline == None:
- wikipedia.setAction(wikipedia.translate(wikipedia.getSite(), msg )
- % (' (-' + commandline_replacements[0] + '
+'
- + commandline_replacements[1] + ')'))
+ if not summary_commandline:
+ edit_summary = pywikibot.translate(pywikibot.getSite(), msg
+ ) % (' (-' + commandline_replacements[0]
+ + ' +' + commandline_replacements[1]
+ + ')')
elif (len(commandline_replacements) > 1):
if (fix == None):
for i in xrange (0, len(commandline_replacements), 2):
replacements.append((commandline_replacements[i],
commandline_replacements[i + 1]))
- if summary_commandline == None:
+ if not summary_commandline:
pairs = [( commandline_replacements[i],
commandline_replacements[i + 1] )
for i in range(0, len(commandline_replacements), 2)]
replacementsDescription = '(%s)' % ', '.join(
[('-' + pair[0] + ' +' + pair[1]) for pair in
pairs])
- wikipedia.setAction(
- wikipedia.translate(wikipedia.getSite(), msg )
- % replacementsDescription)
+ edit_summary = pywikibot.translate(pywikibot.getSite(), msg
+ ) % replacementsDescription
else:
- raise wikipedia.Error(
+ raise pywikibot.Error(
'Specifying -fix with replacements is undefined')
elif fix == None:
- old = wikipedia.input(u'Please enter the text that should be replaced:')
- new = wikipedia.input(u'Please enter the new text:')
+ old = pywikibot.input(u'Please enter the text that should be replaced:')
+ new = pywikibot.input(u'Please enter the new text:')
change = '(-' + old + ' +' + new
replacements.append((old, new))
while True:
- old = wikipedia.input(
+ old = pywikibot.input(
u'Please enter another text that should be replaced, or press Enter to start:')
if old == '':
change = change + ')'
break
- new = wikipedia.input(u'Please enter the new text:')
+ new = pywikibot.input(u'Please enter the new text:')
change = change + ' & -' + old + ' +' + new
replacements.append((old, new))
- if not summary_commandline == True:
- default_summary_message = wikipedia.translate(wikipedia.getSite(), msg) %
change
- wikipedia.output(u'The summary message will default to: %s'
+ if not summary_commandline:
+ default_summary_message = pywikibot.translate(
+ pywikibot.getSite(), msg) % change
+ pywikibot.output(u'The summary message will default to: %s'
% default_summary_message)
- summary_message = wikipedia.input(
+ summary_message = pywikibot.input(
u'Press Enter to use this default message, or enter a description of the\nchanges
your bot will make:')
if summary_message == '':
summary_message = default_summary_message
- wikipedia.setAction(summary_message)
+ edit_summary = summary_message
else:
# Perform one of the predefined actions.
try:
fix = fixes.fixes[fix]
except KeyError:
- wikipedia.output(u'Available predefined fixes are: %s'
+ pywikibot.output(u'Available predefined fixes are: %s'
% fixes.fixes.keys())
return
if fix.has_key('regex'):
regex = fix['regex']
if fix.has_key('msg'):
wikipedia.setAction(
- wikipedia.translate(wikipedia.getSite(), fix['msg']))
+ pywikibot.translate(pywikibot.getSite(), fix['msg']))
if fix.has_key('exceptions'):
exceptions = fix['exceptions']
replacements = fix['replacements']
@@ -683,13 +684,13 @@
gen = pagegenerators.MySQLPageGenerator(query)
elif PageTitles:
- pages = [wikipedia.Page(wikipedia.getSite(), PageTitle)
+ pages = [pywikibot.Page(pywikibot.getSite(), PageTitle)
for PageTitle in PageTitles]
gen = iter(pages)
if not gen:
# syntax error, show help text from the top of this file
- wikipedia.showHelp('replace')
+ pywikibot.showHelp('replace')
return
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
@@ -700,11 +701,13 @@
pageNumber=20, lookahead=100)
else:
preloadingGen = pagegenerators.PreloadingGenerator(gen, pageNumber=60)
- bot = ReplaceRobot(preloadingGen, replacements, exceptions, acceptall, allowoverlap,
recursive, add_cat, sleep)
+ bot = ReplaceRobot(preloadingGen, replacements, exceptions, acceptall,
+ allowoverlap, recursive, add_cat, sleep, edit_summary)
bot.run()
+
if __name__ == "__main__":
try:
main()
finally:
- wikipedia.stopme()
+ pywikibot.stopme()