Utilisateur:YannBot/del redirect.py
Apparence
#!/usr/bin/python
# -*- coding: utf-8 -*-
import catlib
import pagegenerators
import wikipedia
import delete_redirect
import fixing_redirects
import delete
import sys
import re
import time
def add_to_log(msg, opt):
p = wikipedia.Page(opt.site, u"User:Phe/Log move page")
text = p.get()
text += u'\n*' + msg
try:
p.put(text, u'Journal des erreurs de déplacement')
return True
except wikipedia.EditConflict:
return False
def log_error(msg, page, opt):
err_msg = u'Error, page: [[%s]], %s' % (page.title(), msg)
print err_msg
if not add_to_log(err_msg, opt):
time.sleep(10)
if not add_to_log(err_msg, opt):
print u'ERROR: Unable to log last error message'
def fixup_pagename(pages, titles):
results = set()
for p in pages:
found = False
for t in titles:
if p.title() == t[0]:
found = True
results.add(wikipedia.Page(p.site(), t[1]))
if not found:
results.add(p)
return results
def fix_redirect(pages, titles, opt):
if not opt.dry_run:
pages = fixup_pagename(pages, titles)
pages = pagegenerators.PreloadingGenerator(pages)
for p in pages:
text = p.get(get_redirect = True)
new_text = text
for t in titles:
regexp = u'\[\[[ ]*' + regex_from_title(t[0]) + u'[ ]*(\||\]|#)'
repl = u'[[' + t[1] + u'\\1'
new_text = re.sub(regexp, repl, new_text)
if opt.dry_run:
print 'Changing', p.title()
wikipedia.showDiff(text, new_text)
if not opt.dry_run:
p.put(new_text,
comment = u'Correction des redirects après renommage')
def delete_redirect(p, opt):
if p.exists():
if p.isRedirectPage():
print 'deleting page:', p.title()
if len([ x for x in p.getReferences()]) > 1:
if not opt.dry_run:
print u'skipping deletion, linked page exists, please fix linked pages and delete the redirect manually'
else:
if not opt.dry_run:
time.sleep(10)
p.delete(u'Nettoyage après correction des liens',
prompt = False)
else:
if not opt.dry_run:
print u'skipping deletion, page is not a redirect, check linked page before deletion'
def delete_all_redirect(titles, opt):
for t in titles:
if opt.delete_redirect:
p = wikipedia.Page(opt.site, t)
delete_redirect(p, opt)
talk_page = p.toggleTalkPage()
delete_redirect(talk_page, opt)
if __name__ == '__main__':
try:
class Options:
pass
options = Options()
options.dry_run = False
options.fix_redirect = False
options.sync_between_page = True
options.delete_redirect = False
gen = None
options.site = wikipedia.getSite(code = 'fr', fam = 'wikisource')
options.sysop = options.site.isAllowed('delete', True)
for arg in sys.argv[1:]:
if arg == '-dry-run':
options.dry_run = True
elif arg.startswith('-cat:'):
cat_name = unicode(arg[len('-cat:'):], u'utf-8')
cat = catlib.Category(options.site, cat_name)
gen = pagegenerators.CategorizedPageGenerator(cat)
options.sync_between_page = True
elif arg.startswith('-prefix:'):
prefix_name = unicode(arg[len('-prefix;'):], 'utf-8')
gen = pagegenerators.PrefixingPageGenerator(prefix_name, includeredirects = False, site = options.site)
options.sync_between_page = False
elif arg.startswith('-links:'):
pagename = unicode(arg[len('-links:'):], 'utf-8')
page = wikipedia.Page(options.site, pagename)
gen = pagegenerators.LinkedPageGenerator(page)
options.sync_between_page = False
elif arg.startswith('-page:'):
pagename = unicode(arg[len('-page:'):], 'utf-8')
gen = [ wikipedia.Page(options.site, pagename) ]
options.sync_between_page = False
elif arg == '-fix-redirect':
options.fix_redirect = True
elif arg == '-delete-redirect':
options.delete_redirect = True
elif arg == '-help':
print sys.argv[0], '[-dry-run | -help | -cat:cat_name | -prefix:prefix_name | -fix-redirect | -delete-redirect ]'
sys.exit(1)
if options.delete_redirect and not options.sysop:
print 'You asked to delete redirect but have not enough right todo that'
sys.exit(1)
if options.delete_redirect and not options.fix_redirect:
print 'You asked to delete redirect but not to -fix-redirect'
for redirect in gen:
print redirect
delete_redirect(redirect, options)
finally:
wikipedia.stopme()