[Pywikipedia-l] SVN: [6258] branches/rewrite/pywikibot/scripts/solve_disambiguation.py
russblau at svn.wikimedia.org
russblau at svn.wikimedia.org
Wed Jan 14 18:22:16 UTC 2009
Revision: 6258
Author: russblau
Date: 2009-01-14 18:22:16 +0000 (Wed, 14 Jan 2009)
Log Message:
-----------
port to new framework; reformat long lines and refactor some code for efficiency
Modified Paths:
--------------
branches/rewrite/pywikibot/scripts/solve_disambiguation.py
Modified: branches/rewrite/pywikibot/scripts/solve_disambiguation.py
===================================================================
--- branches/rewrite/pywikibot/scripts/solve_disambiguation.py 2009-01-14 18:21:42 UTC (rev 6257)
+++ branches/rewrite/pywikibot/scripts/solve_disambiguation.py 2009-01-14 18:22:16 UTC (rev 6258)
@@ -16,8 +16,9 @@
It is possible to choose to replace only the link (just type the number) or
replace both link and link-text (type 'r' followed by the number).
-Multiple references in one page will be scanned in order, but typing 'n' (next)
-on any one of them will leave the complete page unchanged. To leave only some reference unchanged, use the 's' (skip) option.
+Multiple references in one page will be scanned in order, but typing 'n'
+(next) on any one of them will leave the complete page unchanged. To leave
+only some reference unchanged, use the 's' (skip) option.
Command line options:
@@ -36,9 +37,10 @@
Note: this is the same as -primary -just -pos:XY
-file:XYZ reads a list of pages from a text file. XYZ is the name of the
- file from which the list is taken. If XYZ is not given, the user is asked for a filename.
- Page titles should be inside [[double brackets]].
- The -pos parameter won't work if -file is used.
+ file from which the list is taken. If XYZ is not given, the
+ user is asked for a filename. Page titles should be inside
+ [[double brackets]]. The -pos parameter won't work if -file
+ is used.
-always:XY instead of asking the user what to do, always perform the same
action. For example, XY can be "r0", "u" or "2". Be careful with
@@ -49,10 +51,10 @@
-main only check pages in the main namespace, not in the talk,
wikipedia, user, etc. namespaces.
- -start:XY goes through all disambiguation pages in the category on your wiki
- that is defined (to the bot) as the category containing disambiguation
- pages, starting at XY. If only '-start' or '-start:' is given, it starts
- at the beginning.
+ -start:XY goes through all disambiguation pages in the category on your
+ wiki that is defined (to the bot) as the category containing
+ disambiguation pages, starting at XY. If only '-start' or
+ '-start:' is given, it starts at the beginning.
-min:XX (XX being a number) only work on disambiguation pages for which
at least XX are to be worked on.
@@ -66,6 +68,7 @@
# (C) Daniel Herding, 2004
# (C) Andre Engels, 2003-2004
# (C) WikiWichtel, 2004
+# (C) Pywikipediabot team, 2003-2009
#
# Distributed under the terms of the MIT license.
#
@@ -75,7 +78,9 @@
import re, sys, codecs
# Application specific imports
-import wikipedia, pagegenerators, editarticle
+import pywikibot
+from pywikibot import config, pagegenerators
+from pywikibot.scripts import editarticle
# Summary message when working on disambiguation pages
msg = {
@@ -389,7 +394,8 @@
return string[0].upper()+string[1:]
def correctcap(link, text):
- # If text links to a page with title link uncapitalized, uncapitalize link, otherwise capitalize it
+ # If text links to a page with title link uncapitalized,
+ # uncapitalize link, otherwise capitalize it
linkupper = link.title()
linklower = linkupper[0].lower() + linkupper[1:]
if text.find("[[%s]]"%linklower) > -1 or text.find("[[%s|"%linklower) > -1:
@@ -407,24 +413,29 @@
def __iter__(self):
# TODO: start yielding before all referring pages have been found
- refs = [page for page in self.disambPage.getReferences(follow_redirects = False, withTemplateInclusion = False)]
- wikipedia.output(u"Found %d references." % len(refs))
+ refs = [page for page in
+ self.disambPage.getReferences(follow_redirects=False,
+ withTemplateInclusion=False)]
+ pywikibot.output(u"Found %d references." % len(refs))
# Remove ignorables
- if ignore_title.has_key(self.disambPage.site().family.name) and ignore_title[self.disambPage.site().family.name].has_key(self.disambPage.site().lang):
- for ig in ignore_title[self.disambPage.site().family.name][self.disambPage.site().lang]:
+ if self.disambPage.site().family.name in ignore_title \
+ and self.disambPage.site().lang \
+ in ignore_title[self.disambPage.site().family.name]:
+ for ig in ignore_title[self.disambPage.site().family.name
+ ][self.disambPage.site().lang]:
for i in range(len(refs)-1, -1, -1):
if re.match(ig, refs[i].title()):
- if wikipedia.verbose:
- wikipedia.output('Ignoring page %s'
- % refs[i].title())
+ pywikibot.output(u'Ignoring page %s'
+ % refs[i].title(),
+ level=pywikibot.VERBOSE)
del refs[i]
elif self.primaryIgnoreManager.isIgnored(refs[i]):
- #wikipedia.output('Ignoring page %s because it was skipped before' % refs[i].title())
del refs[i]
if len(refs) < self.minimum:
- wikipedia.output(u"Found only %d pages to work on; skipping." % len(refs))
+ pywikibot.output(u"Found only %d pages to work on; skipping."
+ % len(refs))
return
- wikipedia.output(u"Will work on %d pages." % len(refs))
+ pywikibot.output(u"Will work on %d pages." % len(refs))
for ref in refs:
yield ref
@@ -439,10 +450,12 @@
self.enabled = enabled
self.ignorelist = []
- filename = wikipedia.config.datafilepath('disambiguations',
- self.disambPage.titleForFilename() + '.txt')
+ filename = config.datafilepath(
+ 'disambiguations',
+ self.disambPage.titleForFilename() + '.txt')
try:
- # The file is stored in the disambiguation/ subdir. Create if necessary.
+ # The file is stored in the disambiguation/ subdir.
+ # Create if necessary.
f = codecs.open(filename, 'r', 'utf-8')
for line in f.readlines():
# remove trailing newlines and carriage returns
@@ -461,11 +474,11 @@
def ignore(self, refPage):
if self.enabled:
# Skip this occurence next time.
- filename = wikipedia.config.datafilepath('disambiguations',
- self.disambPage.urlname() + '.txt')
+ filename = config.datafilepath(
+ 'disambiguations',
+ self.disambPage.urlname() + '.txt')
try:
# Open file for appending. If none exists yet, create a new one.
- # The file is stored in the disambiguation/ subdir. Create if necessary.
f = codecs.open(filename, 'a', 'utf-8')
f.write(refPage.urlname() + '\n')
f.close()
@@ -496,7 +509,8 @@
'hu': u'Egyért-redir',
}
- def __init__(self, always, alternatives, getAlternatives, generator, primary, main_only, minimum = 0):
+ def __init__(self, always, alternatives, getAlternatives, generator,
+ primary, main_only, minimum = 0):
self.always = always
self.alternatives = alternatives
self.getAlternatives = getAlternatives
@@ -505,7 +519,7 @@
self.main_only = main_only
self.minimum = minimum
- self.mysite = wikipedia.getSite()
+ self.mysite = pywikibot.getSite()
self.mylang = self.mysite.language()
self.comment = None
@@ -536,33 +550,41 @@
list = u'\n'
for i in range(len(self.alternatives)):
list += (u"%3i - %s\n" % (i, self.alternatives[i]))
- wikipedia.output(list)
+ pywikibot.output(list)
def setupRegexes(self):
# compile regular expressions
self.ignore_contents_regexes = []
- if self.ignore_contents.has_key(self.mylang):
+ if self.mylang in self.ignore_contents:
for ig in self.ignore_contents[self.mylang]:
self.ignore_contents_regexes.append(re.compile(ig))
linktrail = self.mysite.linktrail()
self.trailR = re.compile(linktrail)
- # The regular expression which finds links. Results consist of four groups:
- # group title is the target page title, that is, everything before | or ].
- # group section is the page section. It'll include the # to make life easier for us.
- # group label is the alternative link title, that's everything between | and ].
- # group linktrail is the link trail, that's letters after ]] which are part of the word.
+ # The regular expression which finds links. Results consist of four
+ # groups:
+ # group title is the target page title, that is, everything before
+ # | or ].
+ # group section is the page section. It'll include the # to make life
+ # easier for us.
+ # group label is the alternative link title, that's everything
+ # between | and ].
+ # group linktrail is the link trail, that's letters after ]] which
+ # are part of the word.
# note that the definition of 'letter' varies from language to language.
- self.linkR = re.compile(r'\[\[(?P<title>[^\]\|#]*)(?P<section>#[^\]\|]*)?(\|(?P<label>[^\]]*))?\]\](?P<linktrail>' + linktrail + ')')
+ self.linkR = re.compile(
+ r'\[\[(?P<title>[^\]\|#]*)(?P<section>#[^\]\|]*)?(\|(?P<label>[^\]]*))?\]\](?P<linktrail>'
+ + linktrail + ')')
def treat(self, refPage, disambPage):
"""
Parameters:
- disambPage - The disambiguation page or redirect we don't want anything
- to link on
+ disambPage - The disambiguation page or redirect we don't want
+ anything to link to
refPage - A page linking to disambPage
Returns False if the user pressed q to completely quit the program.
Otherwise, returns True.
+
"""
# TODO: break this function up into subroutines!
@@ -573,24 +595,33 @@
text=refPage.get(throttle=False)
ignoreReason = self.checkContents(text)
if ignoreReason:
- wikipedia.output('\n\nSkipping %s because it contains %s.\n\n' % (refPage.title(), ignoreReason))
+ pywikibot.output('\n\nSkipping %s because it contains %s.\n'
+ % (refPage.title(), ignoreReason))
else:
include = True
- except wikipedia.IsRedirectPage:
- wikipedia.output(u'%s is a redirect to %s' % (refPage.title(), disambPage.title()))
+ except pywikibot.IsRedirectPage:
+ pywikibot.output(u'%s is a redirect to %s'
+ % (refPage.title(), disambPage.title()))
if disambPage.isRedirectPage():
target = self.alternatives[0]
- choice = wikipedia.inputChoice(u'Do you want to make redirect %s point to %s?' % (refPage.title(), target), ['yes', 'no'], ['y', 'N'], 'N')
+ choice = pywikibot.inputChoice(
+ u'Do you want to make redirect %s point to %s?'
+ % (refPage.title(), target), ['yes', 'no'], ['y', 'N'], 'N')
if choice == 'y':
- redir_text = '#%s [[%s]]' % (self.mysite.redirect(default=True), target)
+ redir_text = '#%s [[%s]]' % (
+ self.mysite.redirect(default=True), target)
try:
refPage.put_async(redir_text,comment=self.comment)
- except wikipedia.PageNotSaved, error:
- wikipedia.output(u'Page not saved: %s' % error.args)
+ except pywikibot.PageNotSaved, error:
+ pywikibot.output(u'Page not saved: %s' % error.args)
else:
- choice = wikipedia.inputChoice(u'Do you want to work on pages linking to %s?' % refPage.title(), ['yes', 'no', 'change redirect'], ['y', 'N', 'c'], 'N')
+ choice = pywikibot.inputChoice(
+ u'Do you want to work on pages linking to %s?'
+ % refPage.title(), ['yes', 'no', 'change redirect'],
+ ['y', 'N', 'c'], 'N')
if choice == 'y':
- gen = ReferringPageGeneratorWithIgnore(refPage, self.primary)
+ gen = ReferringPageGeneratorWithIgnore(refPage,
+ self.primary)
preloadingGen = pagegenerators.PreloadingGenerator(gen)
for refPage2 in preloadingGen:
# run until the user selected 'quit'
@@ -599,11 +630,13 @@
elif choice == 'c':
text=refPage.get(throttle=False,get_redirect=True)
include = "redirect"
- except wikipedia.NoPage:
- wikipedia.output(u'Page [[%s]] does not seem to exist?! Skipping.' % refPage.title())
+ except pywikibot.NoPage:
+ pywikibot.output(
+ u'Page [[%s]] does not seem to exist?! Skipping.'
+ % refPage.title())
include = False
if include in (True, "redirect"):
- # make a backup of the original text so we can show the changes later
+ # make a backup of the original text so we can show changes later
original_text = text
n = 0
curpos = 0
@@ -613,25 +646,25 @@
m = self.linkR.search(text, pos = curpos)
if not m:
if n == 0:
- wikipedia.output(u"No changes necessary in %s" % refPage.title())
+ pywikibot.output(u"No changes necessary in %s"
+ % refPage.title())
return True
else:
# stop loop and save page
break
- # Make sure that next time around we will not find this same hit.
+ # Make sure that next time around we will not find same hit.
curpos = m.start() + 1
- # ignore interwiki links and links to sections of the same page
- if m.group('title') == '' or self.mysite.isInterwikiLink(m.group('title')):
+ try:
+ foundlink = pywikibot.Link(m.group('title'),
+ disambPage.site())
+ except pywikibot.Error:
continue
- else:
- try:
- linkPage = wikipedia.Page(disambPage.site(), m.group('title'))
- # Check whether the link found is to disambPage.
- except wikipedia.InvalidTitle:
- continue
- if linkPage != disambPage:
- continue
-
+ # ignore interwiki links
+ if foundlink.site != disambPage.site():
+ continue
+ # check whether the link found is to disambPage
+ if foundlink.canonical_title() != disambPage.title():
+ continue
n += 1
# how many bytes should be displayed around the current link
context = 60
@@ -640,28 +673,38 @@
while True:
# Show the title of the page where the link was found.
# Highlight the title in purple.
- wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % refPage.title())
+ pywikibot.output(
+ u"\n\n>>> \03{lightpurple}%s\03{default} <<<"
+ % refPage.title())
# at the beginning of the link, start red color.
# at the end of the link, reset the color to default
- wikipedia.output(text[max(0, m.start() - context) : m.start()] + '\03{lightred}' + text[m.start() : m.end()] + '\03{default}' + text[m.end() : m.end() + context])
+ pywikibot.output(text[max(0, m.start() - context)
+ : m.start()]
+ + '\03{lightred}'
+ + text[m.start() : m.end()]
+ + '\03{default}'
+ + text[m.end() : m.end() + context])
if not self.always:
if edited:
- choice = wikipedia.input(u"Option (#, r#, s=skip link, e=edit page, n=next page, u=unlink, q=quit\n"
- " m=more context, l=list, a=add new, x=save in this form):")
+ choice = pywikibot.input(
+u"Option (#, r#, s=skip link, e=edit page, n=next page, u=unlink, q=quit,\n"
+u" m=more context, l=list, a=add new, x=save in this form):")
else:
- choice = wikipedia.input(u"Option (#, r#, s=skip link, e=edit page, n=next page, u=unlink, q=quit\n"
- " m=more context, d=show disambiguation page, l=list, a=add new):")
+ choice = pywikibot.input(
+u"Option (#, r#, s=skip link, e=edit page, n=next page, u=unlink, q=quit,\n"
+u" m=more context, d=show disambiguation page, l=list, a=add new):")
else:
choice = self.always
if choice in ['a', 'A']:
- newAlternative = wikipedia.input(u'New alternative:')
+ newAlternative = pywikibot.input(u'New alternative:')
self.alternatives.append(newAlternative)
self.listAlternatives()
elif choice in ['e', 'E']:
editor = editarticle.TextEditor()
- newText = editor.edit(text, jumpIndex = m.start(), highlight = disambPage.title())
+ newText = editor.edit(text, jumpIndex=m.start(),
+ highlight=disambPage.title())
# if user didn't press Cancel
if newText and newText != text:
text = newText
@@ -670,9 +713,15 @@
editor = editarticle.TextEditor()
if disambPage.isRedirectPage():
disambredir = disambPage.getRedirectTarget()
- disambigText = editor.edit(disambredir.get(), jumpIndex = m.start(), highlight = disambredir.title())
+ disambigText = editor.edit(
+ disambredir.get(),
+ jumpIndex=m.start(),
+ highlight=disambredir.title())
else:
- disambigText = editor.edit(disambPage.get(), jumpIndex = m.start(), highlight = disambPage.title())
+ disambigText = editor.edit(
+ disambPage.get(),
+ jumpIndex=m.start(),
+ highlight = disambPage.title())
elif choice in ['l', 'L']:
self.listAlternatives()
elif choice in ['m', 'M']:
@@ -689,7 +738,7 @@
elif choice in ['n', 'N']:
# skip this page
if self.primary:
- # If run with the -primary argument, skip this occurence next time.
+ # If run with -primary, skip this occurence next time.
self.primaryIgnoreManager.ignore(refPage)
return True
elif choice in ['q', 'Q']:
@@ -737,117 +786,150 @@
try:
choice=int(choice)
except ValueError:
- wikipedia.output(u"Unknown option")
- # step back to ask the user again what to do with the current link
+ pywikibot.output(u"Unknown option")
+ # step back to ask the user again what to do with the
+ # current link
curpos -= 1
continue
if choice >= len(self.alternatives) or choice < 0:
- wikipedia.output(u"Choice out of range. Please select a number between 0 and %i." % (len(self.alternatives) - 1))
+ pywikibot.output(
+u"Choice out of range. Please select a number between 0 and %i."
+ % (len(self.alternatives) - 1))
# show list of possible choices
self.listAlternatives()
- # step back to ask the user again what to do with the current link
+ # step back to ask the user again what to do with the
+ # current link
curpos -= 1
continue
new_page_title = self.alternatives[choice]
- repPl = wikipedia.Page(disambPage.site(), new_page_title)
- if (new_page_title[0].isupper()) or (link_text[0].isupper()):
+ repPl = pywikibot.Page(pywikibot.Link(new_page_title,
+ disambPage.site()))
+ if (new_page_title[0].isupper()
+ or link_text[0].isupper()):
new_page_title = repPl.title()
else:
new_page_title = repPl.title()
- new_page_title = new_page_title[0].lower() + new_page_title[1:]
+ new_page_title = new_page_title[0].lower() \
+ + new_page_title[1:]
if new_page_title not in new_targets:
new_targets.append(new_page_title)
if replaceit and trailing_chars:
- newlink = "[[%s%s]]%s" % (new_page_title, section, trailing_chars)
- elif replaceit or (new_page_title == link_text and not section):
+ newlink = "[[%s%s]]%s" % (new_page_title,
+ section,
+ trailing_chars)
+ elif replaceit or (new_page_title == link_text
+ and not section):
newlink = "[[%s]]" % new_page_title
- # check if we can create a link with trailing characters instead of a pipelink
- elif len(new_page_title) <= len(link_text) and firstcap(link_text[:len(new_page_title)]) == firstcap(new_page_title) and re.sub(self.trailR, '', link_text[len(new_page_title):]) == '' and not section:
- newlink = "[[%s]]%s" % (link_text[:len(new_page_title)], link_text[len(new_page_title):])
+ # check if we can create a link with trailing characters
+ # instead of a pipelink
+ elif len(new_page_title) <= len(link_text) \
+ and firstcap(link_text[:len(new_page_title)]) \
+ == firstcap(new_page_title) \
+ and re.sub(self.trailR, '',
+ link_text[len(new_page_title):]) == '' \
+ and not section:
+ newlink = "[[%s]]%s" \
+ % (link_text[:len(new_page_title)],
+ link_text[len(new_page_title):])
else:
- newlink = "[[%s%s|%s]]" % (new_page_title, section, link_text)
+ newlink = "[[%s%s|%s]]" \
+ % (new_page_title, section, link_text)
text = text[:m.start()] + newlink + text[m.end():]
continue
- wikipedia.output(text[max(0,m.start()-30):m.end()+30])
+ pywikibot.output(text[max(0,m.start()-30):m.end()+30])
if text == original_text:
- wikipedia.output(u'\nNo changes have been made:\n')
+ pywikibot.output(u'\nNo changes have been made:\n')
else:
- wikipedia.output(u'\nThe following changes have been made:\n')
- wikipedia.showDiff(original_text, text)
- wikipedia.output(u'')
+ pywikibot.output(u'\nThe following changes have been made:\n')
+ pywikibot.showDiff(original_text, text)
+ pywikibot.output(u'')
# save the page
self.setSummaryMessage(disambPage, new_targets, unlink)
try:
refPage.put_async(text,comment=self.comment)
- except wikipedia.LockedPage:
- wikipedia.output(u'Page not saved: page is locked')
- except wikipedia.PageNotSaved, error:
- wikipedia.output(u'Page not saved: %s' % error.args)
+ except pywikibot.LockedPage:
+ pywikibot.output(u'Page not saved: page is locked')
+ except pywikibot.PageNotSaved, error:
+ pywikibot.output(u'Page not saved: %s' % error.args)
return True
def findAlternatives(self, disambPage):
if disambPage.isRedirectPage() and not self.primary:
- if self.primary_redir_template.has_key(disambPage.site().lang) and self.primary_redir_template[disambPage.site().lang] in disambPage.templates(get_redirect = True):
+ if (disambPage.site().lang in self.primary_redir_template
+ and self.primary_redir_template[disambPage.site().lang]
+ in disambPage.templates(get_redirect = True)):
baseTerm = disambPage.title()
- for template in disambPage.templatesWithParams(get_redirect = True):
- if template[0] == self.primary_redir_template[disambPage.site().lang] and len(template[1]) > 0:
+ for template in disambPage.templatesWithParams(
+ get_redirect=True):
+ if template[0] == self.primary_redir_template[
+ disambPage.site().lang] \
+ and len(template[1]) > 0:
baseTerm = template[1][1]
disambTitle = primary_topic_format[self.mylang] % baseTerm
try:
- disambPage2 = wikipedia.Page(self.mysite, disambTitle)
+ disambPage2 = pywikibot.Page(
+ pywikibot.Link(disambTitle, self.mysite))
links = disambPage2.linkedPages()
links = [correctcap(l,disambPage2.get()) for l in links]
- except wikipedia.NoPage:
- wikipedia.output(u"No page at %s, using redirect target." % disambTitle)
+ except pywikibot.NoPage:
+ pywikibot.output(u"No page at %s, using redirect target."
+ % disambTitle)
links = disambPage.linkedPages()[:1]
- links = [correctcap(l,disambPage.get(get_redirect = True)) for l in links]
+ links = [correctcap(l,disambPage.get(get_redirect = True))
+ for l in links]
self.alternatives += links
else:
try:
target = disambPage.getRedirectTarget().title()
self.alternatives.append(target)
- except wikipedia.NoPage:
- wikipedia.output(u"The specified page was not found.")
- user_input = wikipedia.input(u"""\
+ except pywikibot.NoPage:
+ pywikibot.output(u"The specified page was not found.")
+ user_input = pywikibot.input(u"""\
Please enter the name of the page where the redirect should have pointed at,
or press enter to quit:""")
if user_input == "":
sys.exit(1)
else:
self.alternatives.append(user_input)
- except wikipedia.IsNotRedirectPage:
- wikipedia.output(
+ except pywikibot.IsNotRedirectPage:
+ pywikibot.output(
u"The specified page is not a redirect. Skipping.")
return False
elif self.getAlternatives:
try:
if self.primary:
try:
- disambPage2 = wikipedia.Page(self.mysite,
- primary_topic_format[self.mylang]
- % disambPage.title()
- )
+ disambPage2 = pywikibot.Page(
+ pywikibot.Link(
+ primary_topic_format[self.mylang]
+ % disambPage.title(),
+ self.mysite))
links = disambPage2.linkedPages()
- links = [correctcap(l,disambPage2.get()) for l in links]
- except wikipedia.NoPage:
- wikipedia.output(u"Page does not exist, using the first link in page %s." % disambPage.title())
+ links = [correctcap(l, disambPage2.get())
+ for l in links]
+ except pywikibot.NoPage:
+ pywikibot.output(
+ u"Page does not exist, using the first link in page %s."
+ % disambPage.title())
links = disambPage.linkedPages()[:1]
- links = [correctcap(l,disambPage.get()) for l in links]
+ links = [correctcap(l, disambPage.get())
+ for l in links]
else:
try:
links = disambPage.linkedPages()
- links = [correctcap(l,disambPage.get()) for l in links]
- except wikipedia.NoPage:
- wikipedia.output(u"Page does not exist, skipping.")
+ links = [correctcap(l ,disambPage.get())
+ for l in links]
+ except pywikibot.NoPage:
+ pywikibot.output(u"Page does not exist, skipping.")
return False
- except wikipedia.IsRedirectPage:
- wikipedia.output(u"Page is a redirect, skipping.")
+ except pywikibot.IsRedirectPage:
+ pywikibot.output(u"Page is a redirect, skipping.")
return False
self.alternatives += links
return True
- def setSummaryMessage(self, disambPage, new_targets = [], unlink = False):
+ def setSummaryMessage(self, disambPage, new_targets=[], unlink=False):
# make list of new targets
targets = ''
for page_title in new_targets:
@@ -856,57 +938,74 @@
targets = targets[:-2]
if not targets:
- targets = wikipedia.translate(self.mysite, unknown_msg)
+ targets = pywikibot.translate(self.mysite, unknown_msg)
# first check whether user has customized the edit comment
- if wikipedia.config.disambiguation_comment.has_key(self.mysite.family.name) and wikipedia.config.disambiguation_comment[self.mysite.family.name].has_key(self.mylang):
+ if (self.mysite.family.name in config.disambiguation_comment
+ and self.mylang in config.disambiguation_comment
+ [self.mysite.family.name]):
try:
- self.comment = wikipedia.translate(self.mysite,
- wikipedia.config.disambiguation_comment[
- self.mysite.family.name]
- ) % (disambPage.title(), targets)
- #Backwards compatibility, type error probably caused by too many arguments for format string
+ self.comment = pywikibot.translate(
+ self.mysite,
+ config.disambiguation_comment
+ [self.mysite.family.name]
+ ) % (disambPage.title(), targets)
+ # Backwards compatibility, type error probably caused by too
+ # many arguments for format string
except TypeError:
- self.comment = wikipedia.translate(self.mysite,
- wikipedia.config.disambiguation_comment[
- self.mysite.family.name]
- ) % disambPage.title()
+ self.comment = pywikibot.translate(
+ self.mysite,
+ config.disambiguation_comment
+ [self.mysite.family.name]
+ ) % disambPage.title()
elif disambPage.isRedirectPage():
# when working on redirects, there's another summary message
if unlink and not new_targets:
- self.comment = wikipedia.translate(self.mysite, msg_redir_unlink) % disambPage.title()
+ self.comment = pywikibot.translate(
+ self.mysite,
+ msg_redir_unlink
+ ) % disambPage.title()
else:
- self.comment = wikipedia.translate(self.mysite, msg_redir) % (disambPage.title(), targets)
+ self.comment = pywikibot.translate(
+ self.mysite, msg_redir
+ ) % (disambPage.title(), targets)
else:
if unlink and not new_targets:
- self.comment = wikipedia.translate(self.mysite, msg_unlink) % disambPage.title()
+ self.comment = pywikibot.translate(
+ self.mysite, msg_unlink
+ ) % disambPage.title()
else:
- self.comment = wikipedia.translate(self.mysite, msg) % (disambPage.title(), targets)
+ self.comment = pywikibot.translate(
+ self.mysite, msg
+ ) % (disambPage.title(), targets)
def run(self):
if self.main_only:
- if not ignore_title.has_key(self.mysite.family.name):
+ if self.mysite.family.name not in ignore_title:
ignore_title[self.mysite.family.name] = {}
- if not ignore_title[self.mysite.family.name].has_key(self.mylang):
+ if self.mylang not in ignore_title[self.mysite.family.name]:
ignore_title[self.mysite.family.name][self.mylang] = []
ignore_title[self.mysite.family.name][self.mylang] += [
- u'%s:' % namespace for namespace in self.mysite.namespaces()]
+ u'%s:' % ns for namespace in self.mysite.namespaces()
+ for ns in self.mysite.namespaces()[namespace]]
for disambPage in self.generator:
- self.primaryIgnoreManager = PrimaryIgnoreManager(disambPage, enabled=self.primary)
+ self.primaryIgnoreManager = PrimaryIgnoreManager(
+ disambPage, enabled=self.primary)
if not self.findAlternatives(disambPage):
continue
self.makeAlternativesUnique()
# sort possible choices
- if wikipedia.config.sort_ignore_case:
+ if config.sort_ignore_case:
self.alternatives.sort(lambda x,y: cmp(x.lower(), y.lower()))
else:
self.alternatives.sort()
self.listAlternatives()
- gen = ReferringPageGeneratorWithIgnore(disambPage, self.primary, minimum = self.minimum)
+ gen = ReferringPageGeneratorWithIgnore(disambPage, self.primary,
+ minimum=self.minimum)
preloadingGen = pagegenerators.PreloadingGenerator(gen)
for refPage in preloadingGen:
if not self.primaryIgnoreManager.isIgnored(refPage):
@@ -917,7 +1016,7 @@
# clear alternatives before working on next disambiguation page
self.alternatives = []
-def main():
+def main(*args):
# the option that's always selected when the bot wonders what to do with
# a link. If it's None, the user is prompted (default behaviour).
always = None
@@ -936,7 +1035,7 @@
ignoreCase = False
minimum = 0
- for arg in wikipedia.handleArgs():
+ for arg in pywikibot.handleArgs(*args):
if arg.startswith('-primary:'):
primary = True
getAlternatives = False
@@ -947,17 +1046,20 @@
always = arg[8:]
elif arg.startswith('-file'):
if len(arg) == 5:
- generator = pagegenerators.TextfilePageGenerator(filename = None)
+ generator = pagegenerators.TextfilePageGenerator(
+ filename = None)
else:
- generator = pagegenerators.TextfilePageGenerator(filename = arg[6:])
+ generator = pagegenerators.TextfilePageGenerator(
+ filename = arg[6:])
elif arg.startswith('-pos:'):
if arg[5]!=':':
- mysite = wikipedia.getSite()
- page = wikipedia.Page(mysite, arg[5:])
+ mysite = pywikibot.getSite()
+ page = pywikibot.Page(pywikibot.Link(arg[5:], mysite))
if page.exists():
alternatives.append(page.title())
else:
- answer = wikipedia.inputChoice(u'Possibility %s does not actually exist. Use it anyway?'
+ answer = pywikibot.inputChoice(
+ u'Possibility %s does not actually exist. Use it anyway?'
% page.title(), ['yes', 'no'], ['y', 'N'], 'N')
if answer == 'y':
alternatives.append(page.title())
@@ -972,17 +1074,21 @@
elif arg.startswith('-start'):
try:
if len(arg) <= len('-start:'):
- generator = pagegenerators.CategorizedPageGenerator(wikipedia.getSite().disambcategory())
+ generator = pagegenerators.CategorizedPageGenerator(
+ pywikibot.getSite().disambcategory())
else:
- generator = pagegenerators.CategorizedPageGenerator(wikipedia.getSite().disambcategory(), start = arg[7:])
- generator = pagegenerators.NamespaceFilterPageGenerator(generator, [0])
- except wikipedia.NoPage:
+ generator = pagegenerators.CategorizedPageGenerator(
+ pywikibot.getSite().disambcategory(),
+ start = arg[7:])
+ generator = pagegenerators.NamespaceFilterPageGenerator(
+ generator, [0])
+ except pywikibot.NoPage:
print "Disambiguation category for your wiki is not known."
raise
elif arg.startswith("-"):
print "Unrecognized command line argument: %s" % arg
# show help text and exit
- wikipedia.showHelp()
+ pywikibot.showHelp()
else:
pageTitle.append(arg)
@@ -990,17 +1096,19 @@
# connect the title's parts with spaces
if pageTitle != []:
pageTitle = ' '.join(pageTitle)
- page = wikipedia.Page(wikipedia.getSite(), pageTitle)
+ page = pywikibot.Page(pywikibot.Link(pageTitle, pywikibot.getSite()))
generator = iter([page])
# if no disambiguation pages was given as an argument, and none was
# read from a file, query the user
if not generator:
- pageTitle = wikipedia.input(u'On which disambiguation page do you want to work?')
- page = wikipedia.Page(wikipedia.getSite(), pageTitle)
+ pageTitle = pywikibot.input(
+ u'On which disambiguation page do you want to work?')
+ page = pywikibot.Page(pywikibot.Link(pageTitle, pywikibot.getSite()))
generator = iter([page])
- bot = DisambiguationRobot(always, alternatives, getAlternatives, generator, primary, main_only, minimum = minimum)
+ bot = DisambiguationRobot(always, alternatives, getAlternatives, generator,
+ primary, main_only, minimum=minimum)
bot.run()
@@ -1009,4 +1117,4 @@
try:
main()
finally:
- wikipedia.stopme()
+ pywikibot.stopme()
More information about the Pywikipedia-l
mailing list