Revision: 8133 Author: xqt Date: 2010-04-27 16:45:03 +0000 (Tue, 27 Apr 2010)
Log Message: ----------- cross update from rewrite/trunk
Modified Paths: -------------- branches/rewrite/scripts/redirect.py trunk/pywikipedia/redirect.py
Modified: branches/rewrite/scripts/redirect.py =================================================================== --- branches/rewrite/scripts/redirect.py 2010-04-27 08:41:02 UTC (rev 8132) +++ branches/rewrite/scripts/redirect.py 2010-04-27 16:45:03 UTC (rev 8133) @@ -20,7 +20,7 @@ works with action "double".
-namespace:n Namespace to process. Can be given multiple times, for several - namespaces. If omitted, only the main (article) namespace is + namespaces. If omitted, only the main (article) namespace is treated.
-offset:n With -moves, the number of hours ago to start scanning moved @@ -144,19 +144,11 @@ 'zh-yue': u'機械人:跳轉目標唔存在', }
-# Summary message for putting broken redirect to speedy delete -sd_tagging_sum = { - 'ar': u'روبوت: وسم للحذف السريع', - 'cs': u'Robot označil ke smazání', - 'en': u'Robot: Tagging for speedy deletion', - 'ga': u'Róbó: Ag maircáil le luas-scrios', - 'it': u'Bot: +Da cancellare subito', - 'ja': u'ロボットによる:迷子のリダイレクトを即時削除へ', - 'ksh':u'Bot: Di Ömlëijdong jeiht noh nörjendwoh.', - 'nds':u'Bot: Kaputte Wiederleiden ward nich brukt', - 'nl': u'Bot: gemarkeerd voor snelle verwijdering', - 'war':u'Robot: Nautod o nagbinalikbalik nga redirek', - 'zh': u'機器人: 將損壞的重定向提報快速刪除', +# Reason for deleting redirect loops +reason_loop={ + 'ar': u'بوت: هدف التحويلة يصنع عقدة تحويل', + 'de': u'Bot: Weiterleitungsziel auf sich selbst', + 'en': u'[[WP:CSD#G8|G8]]: [[Wikipedia:Redirect|Redirect]] target forms a redirect loop', }
# Insert deletion template into page with a broken redirect @@ -192,6 +184,8 @@ self.api_start = start self.api_until = until self.api_number = number + if self.api_number is None: + self.api_number = 'max'
## def get_redirects_from_dump(self, alsoGetPageTitles=False): ## ''' @@ -319,7 +313,7 @@ data = gen.submit() if 'error' in data: raise RuntimeError("API query error: %s" % data) - if data == [] or "query" not in data: + if data == [] or 'query' not in data: raise RuntimeError("No results given.") redirects = {} pages = {} @@ -522,7 +516,7 @@ redir_page.delete(reason, prompt = False) except pywikibot.NoUsername: if targetPage.site().lang in sd_template \ - and targetPage.site().lang in sd_tagging_sum: + and targetPage.site().lang in reason_broken: pywikibot.output( u"No sysop in user-config.py, put page to speedy deletion.") content = redir_page.get(get_redirect=True) @@ -531,7 +525,7 @@ sd_template)+"\n"+content summary = pywikibot.translate( targetPage.site().lang, - sd_tagging_sum) + reason_broken) redir_page.put(content, summary)
except pywikibot.IsRedirectPage: @@ -609,11 +603,15 @@ else: pywikibot.output( u' Links to: %s.' - % targetPage.title(asLink=True)) + % targetPage.title(asLink=True)) + if targetPage.site().sitename() == 'wikipedia:en' \ + and targetPage.title() == 'Target page name': + pywikibot.output(u"Skipping: Redirect source is vandalized.") + break if targetPage.site() != self.site: pywikibot.output( - u'Warning: redirect target (%s) is on a different site.' - % (targetPage.title(asLink=True))) + u'Warning: redirect target (%s) is on a different site.' + % (targetPage.title(asLink=True))) if self.always: break # skip if automatic # watch out for redirect loops @@ -622,8 +620,8 @@ targetPage.title(withSection=False)) ) > 0: pywikibot.output( - u'Warning: Redirect target %s forms a redirect loop.' - % targetPage.title(asLink=True)) + u'Warning: Redirect target %s forms a redirect loop.' + % targetPage.title(asLink=True)) break ###xqt doesn't work. edits twice! try: content = targetPage.get(get_redirect=True) @@ -680,8 +678,8 @@ % redir.title()) except pywikibot.Error, error: pywikibot.output( - u"Unexpected error occurred trying to save [[%s]]: %s" - % (redir.title(), error)) + u"Unexpected error occurred trying to save [[%s]]: %s" + % (redir.title(), error)) break
def fix_double_or_delete_broken_redirects(self):
Modified: trunk/pywikipedia/redirect.py =================================================================== --- trunk/pywikipedia/redirect.py 2010-04-27 08:41:02 UTC (rev 8132) +++ trunk/pywikipedia/redirect.py 2010-04-27 16:45:03 UTC (rev 8133) @@ -20,24 +20,24 @@ (http://download.wikimedia.org). Argument can also be given as "-xml:filename.xml". Cannot be used with -api or -moves.
+-api Retrieve information from the wiki via MediaWikis application + program interface (API). Cannot be used with -xml. + -moves Use the page move log to find double-redirect candidates. Only works with action "double", does not work with -xml. You may use -api option for retrieving pages via API
--api Retrieve information from the wiki via MediaWikis application - program interface (API). Cannot be used with -xml. - NOTE: If neither of -xml -api -moves is given, info will be loaded from a special page of the live wiki.
--namespace:n Namespace to process. Works only with an XML dump, or the API - interface. Can be given multiple times, for several namespaces. - If omitted, with -xml all namespaces are treated, with -api - only the main (article) namespace is treated. +-namespace:n Namespace to process. Can be given multiple times, for several + namespaces. If omitted, only the main (article) namespace is + is treated with -api, with -xml all namespaces are treated, + Works only with an XML dump, or the API interface.
--offset:n With -xml, the number of the redirect to restart with (see - progress). With -moves, the number of hours ago to start - scanning moved pages. Otherwise, ignored. +-offset:n With -moves, the number of hours ago to start scanning moved + pages. With -xml, the number of the redirect to restart with + (see progress). Otherwise, ignored.
-start:title With -api, the starting page title in each namespace. Otherwise ignored. Page needs not exist. @@ -59,7 +59,8 @@ # # from __future__ import generators -import wikipedia, config, query +import wikipedia as pywikibot +import config, query import xmlreader import re, sys, datetime
@@ -179,7 +180,7 @@ def __init__(self, xmlFilename=None, namespaces=[], offset=-1, use_move_log=False, use_api=False, start=None, until=None, number=None): - self.site = wikipedia.getSite() + self.site = pywikibot.getSite() self.xmlFilename = xmlFilename self.namespaces = namespaces if use_api and self.namespaces == []: @@ -212,9 +213,9 @@ readPagesCount += 1 # always print status message after 10000 pages if readPagesCount % 10000 == 0: - wikipedia.output(u'%i pages read...' % readPagesCount) + pywikibot.output(u'%i pages read...' % readPagesCount) if len(self.namespaces) > 0: - if wikipedia.Page(self.site, entry.title).namespace() \ + if pywikibot.Page(self.site, entry.title).namespace() \ not in self.namespaces: continue if alsoGetPageTitles: @@ -233,7 +234,7 @@ if target.startswith(':'): target = target[1:] else: - wikipedia.output( + pywikibot.output( u'NOTE: Ignoring %s which is a redirect to %s:' % (entry.title, code)) target = None @@ -245,13 +246,13 @@ # remove leading and trailing whitespace target = target.strip('_') # capitalize the first letter - if not wikipedia.getSite().nocapitalize: + if not pywikibot.getSite().nocapitalize: source = source[:1].upper() + source[1:] target = target[:1].upper() + target[1:] if '#' in target: target = target[:target.index('#')].rstrip("_") if '|' in target: - wikipedia.output( + pywikibot.output( u'HINT: %s is a redirect with a pipelink.' % entry.title) target = target[:target.index('|')].rstrip("_") @@ -263,9 +264,7 @@ return redict
def get_redirect_pageids_via_api(self): - """ - Return generator that yields page IDs of Pages that are redirects. - """ + """Return generator that yields page IDs of Pages that are redirects.""" params = { 'action': 'query', 'list': 'allpages', @@ -280,7 +279,7 @@ params['apfrom'] = self.api_start done = False while not done: - wikipedia.output(u'\nRetrieving pages...', newline=False) + pywikibot.output(u'\nRetrieving pages...', newline=False) data = query.GetData(params, self.site) if "limits" in data: # process aplimit = max params['aplimit'] = int(data['limits']['allpages']) @@ -293,7 +292,7 @@ else: break
- def _next_redirects_via_api_commandline(self): + def _next_redirect_group(self): """ Return a generator that retrieves pageids from the API 500 at a time and yields them as a list @@ -334,13 +333,13 @@ 'redirects':1, #'':'', } - for apiQ in self._next_redirects_via_api_commandline(): + for apiQ in self._next_redirect_group(): params['pageids'] = apiQ - wikipedia.output(u'.', newline=False) + pywikibot.output(u'.', newline=False) data = query.GetData(params, self.site) if 'error' in data: raise RuntimeError("API query error: %s" % data) - if data == []: + if data == [] or 'query' not in data: raise RuntimeError("No results given.") redirects = {} pages = {} @@ -387,7 +386,7 @@ # retrieve information from the live wiki's maintenance page # broken redirect maintenance page's URL path = self.site.broken_redirects_address(default_limit=False) - wikipedia.output(u'Retrieving special page...') + pywikibot.output(u'Retrieving special page...') maintenance_txt = self.site.getUrl(path)
# regular expression which finds redirects which point to a @@ -395,13 +394,13 @@ Rredir = re.compile('<li><a href=".+?" title="(.*?)"')
redir_names = Rredir.findall(maintenance_txt) - wikipedia.output(u'Retrieved %d redirects from special page.\n' + pywikibot.output(u'Retrieved %d redirects from special page.\n' % len(redir_names)) for redir_name in redir_names: yield redir_name else: # retrieve information from XML dump - wikipedia.output( + pywikibot.output( u'Getting a list of all redirects and of all page titles...') redirs, pageTitles = self.get_redirects_from_dump( alsoGetPageTitles=True) @@ -424,24 +423,24 @@ elif self.xmlFilename == None: if self.use_move_log: if self.use_api: - gen = self.get_moved_pages_redirects_via_api() + gen = self.get_moved_pages_redirects() else: - gen = self.get_moved_pages_redirects() + gen = self.get_moved_pages_redirects_old() for redir_page in gen: yield redir_page.title() return # retrieve information from the live wiki's maintenance page # double redirect maintenance page's URL -# wikipedia.config.special_page_limit = 1000 +# pywikibot.config.special_page_limit = 1000 path = self.site.double_redirects_address(default_limit = False) - wikipedia.output(u'Retrieving special page...') + pywikibot.output(u'Retrieving special page...') maintenance_txt = self.site.getUrl(path)
# regular expression which finds redirects which point to # another redirect inside the HTML Rredir = re.compile('<li><a href=".+?" title="(.*?)">') redir_names = Rredir.findall(maintenance_txt) - wikipedia.output(u'Retrieved %i redirects from special page.\n' + pywikibot.output(u'Retrieved %i redirects from special page.\n' % len(redir_names)) for redir_name in redir_names: yield redir_name @@ -454,40 +453,44 @@ # redirect as well if num > self.offset and value in redict: yield key - wikipedia.output(u'\nChecking redirect %i of %i...' + pywikibot.output(u'\nChecking redirect %i of %i...' % (num + 1, len(redict)))
- def get_moved_pages_redirects_via_api(self): + def get_moved_pages_redirects(self): + '''generate redirects to recently-moved pages''' + # this will run forever, until user interrupts it + if self.offset <= 0: self.offset = 1 start = datetime.datetime.utcnow() \ - - datetime.timedelta(0, self.offset*3600) + - datetime.timedelta(0, self.offset*3600) + # self.offset hours ago offset_time = start.strftime("%Y%m%d%H%M%S") - wikipedia.output(u'Retrieving %d moved pages via API...' + pywikibot.output(u'Retrieving %d moved pages via API...' % self.api_number) - if wikipedia.verbose: - wikipedia.output(u"[%s]" % offset_time) + if pywikibot.verbose: + pywikibot.output(u"[%s]" % offset_time) for moved_page,u,t,c in self.site.logpages(number=self.api_number, mode='move', start=offset_time): try: if not moved_page.isRedirectPage(): continue - except wikipedia.BadTitle: + except pywikibot.BadTitle: continue - except wikipedia.ServerError: + except pywikibot.ServerError: continue + # moved_page is now a redirect, so any redirects pointing + # to it need to be changed try: for page in moved_page.getReferences(follow_redirects=True, redirectsOnly=True): yield page - except wikipedia.NoPage: + except pywikibot.NoPage: # original title must have been deleted after move continue
- def get_moved_pages_redirects(self): - '''generate redirects to recently-moved pages''' - # this will run forever, until user interrupts it + def get_moved_pages_redirects_old(self):
move_regex = re.compile( r'moved <a href.*?>(.*?)</a> to <a href=.*?>.*?</a>.*?</li>') @@ -508,23 +511,23 @@ % offset_time try: move_list = self.site.getUrl(move_url) - if wikipedia.verbose: - wikipedia.output(u"[%s]" % offset_time) + if pywikibot.verbose: + pywikibot.output(u"[%s]" % offset_time) except: import traceback - wikipedia.output(unicode(traceback.format_exc())) + pywikibot.output(unicode(traceback.format_exc())) return g = move_regex.findall(move_list) - if wikipedia.verbose: - wikipedia.output(u"%s moved pages" % len(g)) + if pywikibot.verbose: + pywikibot.output(u"%s moved pages" % len(g)) for moved_title in g: - moved_page = wikipedia.Page(self.site, moved_title) + moved_page = pywikibot.Page(self.site, moved_title) try: if not moved_page.isRedirectPage(): continue - except wikipedia.BadTitle: + except pywikibot.BadTitle: continue - except wikipedia.ServerError: + except pywikibot.ServerError: continue # moved_page is now a redirect, so any redirects pointing # to it need to be changed @@ -532,7 +535,7 @@ for page in moved_page.getReferences(follow_redirects=True, redirectsOnly=True): yield page - except wikipedia.NoPage: + except pywikibot.NoPage: # original title must have been deleted after move continue m = offsetpattern.search(move_list) @@ -542,7 +545,7 @@
class RedirectRobot: def __init__(self, action, generator, always=False, number=None): - self.site = wikipedia.getSite() + self.site = pywikibot.getSite() self.action = action self.generator = generator self.always = always @@ -551,7 +554,7 @@
def prompt(self, question): if not self.always: - choice = wikipedia.inputChoice(question, + choice = pywikibot.inputChoice(question, ['Yes', 'No', 'All', 'Quit'], ['y', 'N', 'a', 'q'], 'N') if choice == 'n': @@ -565,59 +568,59 @@
def delete_broken_redirects(self): # get reason for deletion text - reason = wikipedia.translate(self.site, reason_broken) + reason = pywikibot.translate(self.site, reason_broken) for redir_name in self.generator.retrieve_broken_redirects(): self.delete_1_broken_redirect( redir_name, reason) if self.exiting: break
def delete_1_broken_redirect(self, redir_name, reason): - redir_page = wikipedia.Page(self.site, redir_name) + redir_page = pywikibot.Page(self.site, redir_name) # 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} <<<" % redir_page.title()) try: targetPage = redir_page.getRedirectTarget() - except wikipedia.IsNotRedirectPage: - wikipedia.output(u'%s is not a redirect.' % redir_page.title()) - except wikipedia.NoPage: - wikipedia.output(u'%s doesn't exist.' % redir_page.title()) + except pywikibot.IsNotRedirectPage: + pywikibot.output(u'%s is not a redirect.' % redir_page.title()) + except pywikibot.NoPage: + pywikibot.output(u'%s doesn't exist.' % redir_page.title()) else: try: targetPage.get() - except wikipedia.NoPage: + except pywikibot.NoPage: if self.prompt( u'Redirect target %s does not exist. Do you want to delete %s?' % (targetPage.aslink(), redir_page.aslink())): try: redir_page.delete(reason, prompt = False) - except wikipedia.NoUsername: + except pywikibot.NoUsername: if targetPage.site().lang in sd_template \ and targetPage.site().lang in reason_broken: - wikipedia.output( + pywikibot.output( u"No sysop in user-config.py, put page to speedy deletion.") content = redir_page.get(get_redirect=True) - content = wikipedia.translate( + content = pywikibot.translate( targetPage.site().lang, sd_template)+"\n"+content - summary = wikipedia.translate( + summary = pywikibot.translate( targetPage.site().lang, reason_broken) redir_page.put(content, summary)
- except wikipedia.IsRedirectPage: - wikipedia.output( + except pywikibot.IsRedirectPage: + pywikibot.output( u'Redirect target %s is also a redirect! Won't delete anything.' % targetPage.aslink()) else: #we successfully get the target page, meaning that #it exists and is not a redirect: no reason to touch it. - wikipedia.output( + pywikibot.output( u'Redirect target %s does exist! Won't delete anything.' % targetPage.aslink()) - wikipedia.output(u'') + pywikibot.output(u'')
def fix_double_redirects(self): for redir_name in self.generator.retrieve_double_redirects(): @@ -626,10 +629,10 @@ break
def fix_1_double_redirect(self, redir_name): - redir = wikipedia.Page(self.site, redir_name) + redir = pywikibot.Page(self.site, redir_name) # 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} <<<" % redir.title()) newRedir = redir redirList = [] # bookkeeping to detect loops @@ -638,57 +641,57 @@ newRedir.sectionFreeTitle())) try: targetPage = newRedir.getRedirectTarget() - except wikipedia.IsNotRedirectPage: + except pywikibot.IsNotRedirectPage: if len(redirList) == 1: - wikipedia.output(u'Skipping: Page %s is not a redirect.' + pywikibot.output(u'Skipping: Page %s is not a redirect.' % redir.aslink()) break #do nothing elif len(redirList) == 2: - wikipedia.output( + pywikibot.output( u'Skipping: Redirect target %s is not a redirect.' % newRedir.aslink()) break # do nothing - except wikipedia.SectionError: - wikipedia.output( + except pywikibot.SectionError: + pywikibot.output( u'Warning: Redirect target section %s doesn't exist.' % newRedir.aslink()) - except wikipedia.BadTitle, e: + except pywikibot.BadTitle, e: # str(e) is in the format 'BadTitle: [[Foo]]' - wikipedia.output( + pywikibot.output( u'Warning: Redirect target %s is not a valid page title.' % str(e)[10:]) #sometimes this error occures. Invalid Title starting with a '#' - except wikipedia.InvalidTitle, err: - wikipedia.output(u'Warning: %s' % err) + except pywikibot.InvalidTitle, err: + pywikibot.output(u'Warning: %s' % err) break - except wikipedia.NoPage: + except pywikibot.NoPage: if len(redirList) == 1: - wikipedia.output(u'Skipping: Page %s does not exist.' + pywikibot.output(u'Skipping: Page %s does not exist.' % redir.aslink()) break else: if self.always: - wikipedia.output( + pywikibot.output( u"Skipping: Redirect target %s doesn't exist." % newRedir.aslink()) break # skip if automatic else: - wikipedia.output( + pywikibot.output( u"Warning: Redirect target %s doesn't exist." % newRedir.aslink()) - except wikipedia.ServerError: - wikipedia.output(u'Skipping: Server Error') + except pywikibot.ServerError: + pywikibot.output(u'Skipping: Server Error') break else: - wikipedia.output( + pywikibot.output( u' Links to: %s.' % targetPage.aslink()) if targetPage.site().sitename() == 'wikipedia:en' \ and targetPage.title() == 'Target page name': - wikipedia.output(u"Skipping: Redirect source is vandalized.") + pywikibot.output(u"Skipping: Redirect source is vandalized.") break if targetPage.site() != self.site: - wikipedia.output( + pywikibot.output( u'Warning: redirect target (%s) is on a different site.' % (targetPage.aslink())) if self.always: @@ -698,36 +701,36 @@ % (targetPage.site().lang, targetPage.sectionFreeTitle()) ) > 0: - wikipedia.output( + pywikibot.output( u'Warning: Redirect target %s forms a redirect loop.' % targetPage.aslink()) break ###xqt doesn't work. edits twice! try: content = targetPage.get(get_redirect=True) - except wikipedia.SectionError: - content = wikipedia.Page( + except pywikibot.SectionError: + content = pywikibot.Page( targetPage.site(), targetPage.sectionFreeTitle() ).get(get_redirect=True) if targetPage.site().lang in sd_template \ and targetPage.site().lang in sd_tagging_sum: - wikipedia.output(u"Tagging redirect for deletion") + pywikibot.output(u"Tagging redirect for deletion") # Delete the two redirects - content = wikipedia.translate( + content = pywikibot.translate( targetPage.site().lang, sd_template)+"\n"+content - summ = wikipedia.translate(targetPage.site().lang, + summ = pywikibot.translate(targetPage.site().lang, sd_tagging_sum) targetPage.put(content, summ) redir.put(content, summ) break # TODO Better implement loop redirect else: newRedir = targetPage - continue # + continue try: oldText = redir.get(get_redirect=True) - except wikipedia.BadTitle: - wikipedia.output(u"Bad Title Error") + except pywikibot.BadTitle: + pywikibot.output(u"Bad Title Error") break text = self.site.redirectRegex().sub( '#%s %s' % @@ -736,35 +739,35 @@ oldText) if text == oldText: break - summary = wikipedia.translate(self.site, msg_double)\ + summary = pywikibot.translate(self.site, msg_double)\ % targetPage.aslink() - wikipedia.showDiff(oldText, text) + pywikibot.showDiff(oldText, text) if self.prompt(u'Do you want to accept the changes?'): try: redir.put(text, summary) - except wikipedia.LockedPage: - wikipedia.output(u'%s is locked.' % redir.title()) - except wikipedia.SpamfilterError, error: - wikipedia.output( + except pywikibot.LockedPage: + pywikibot.output(u'%s is locked.' % redir.title()) + except pywikibot.SpamfilterError, error: + pywikibot.output( u"Saving page [[%s]] prevented by spam filter: %s" % (redir.title(), error.url)) - except wikipedia.PageNotSaved, error: - wikipedia.output(u"Saving page [[%s]] failed: %s" + except pywikibot.PageNotSaved, error: + pywikibot.output(u"Saving page [[%s]] failed: %s" % (redir.title(), error)) - except wikipedia.NoUsername: - wikipedia.output( + except pywikibot.NoUsername: + pywikibot.output( u"Page [[%s]] not saved; sysop privileges required." % redir.title()) - except wikipedia.Error, error: - wikipedia.output( + except pywikibot.Error, error: + pywikibot.output( u"Unexpected error occurred trying to save [[%s]]: %s" - % (redir.title(), error)) + % (redir.title(), error)) break
def fix_double_or_delete_broken_redirects(self): # TODO: part of this should be moved to generator, the rest merged into self.run() # get reason for deletion text - delete_reason = wikipedia.translate(self.site, reason_broken) + delete_reason = pywikibot.translate(self.site, reason_broken) count = 0 for (redir_name, code, target, final)\ in self.generator.get_redirects_via_api(maxlen=2): @@ -780,8 +783,8 @@ break
def run(self): - # TODO: make all generators return a redicet type indicator, - # thus make them usabile with 'both' + # TODO: make all generators return a redirect type indicator, + # thus make them usable with 'both' if self.action == 'double': self.fix_double_redirects() elif self.action == 'broken': @@ -810,7 +813,7 @@ until = '' number = None always = False - for arg in wikipedia.handleArgs(*args): + for arg in pywikibot.handleArgs(*args): if arg == 'double' or arg == 'do': action = 'double' elif arg == 'broken' or arg == 'br': @@ -821,7 +824,7 @@ api = True 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:] @@ -831,7 +834,7 @@ ns = arg[11:] if ns == '': ## "-namespace:" does NOT yield -namespace:0 further down the road! - ns = wikipedia.input( + ns = pywikibot.input( u'Please enter a namespace by its number: ') # u'Please enter a namespace by its name or number: ') # TODO! at least for some generators. @@ -855,11 +858,11 @@ elif arg == '-always': always = True else: - wikipedia.output(u'Unknown argument: %s' % arg) + pywikibot.output(u'Unknown argument: %s' % arg)
if not action or (xmlFilename and moved_pages)\ or (api and xmlFilename): - wikipedia.showHelp('redirect') + pywikibot.showHelp('redirect') else: gen = RedirectGenerator(xmlFilename, namespaces, offset, moved_pages, api, start, until, number) @@ -870,4 +873,4 @@ try: main() finally: - wikipedia.stopme() + pywikibot.stopme()