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()