CM.py
DoneList=list()
Main program
from wikitools import *
import time
import datetime
import urllib
import json
import userpassbot #Bot password
import warnings
import re
import mwparserfromhell
import datetime
import sys
import CM
site = wiki.Wiki() #Tell Python to use the English Wikipedia's API
site.login(userpassbot.username, userpassbot.password) #login
name = 'Category:Articles with missing files'
reTemplate = re.compile('\n*\{\{.*[Bb]rokenImage.*}}')
#routine to autoswitch some of the output - as filenames have accented chars!
def pnt(s):
try:
print(s)
except UnicodeEncodeError:
print(s.encode('utf-8'))
def startAllowed():
textpage = page.Page(site, "User:RonBot/12/Run").getWikiText()
if textpage == "Run":
return "run"
else:
return "no"
def allow_bots(text, user):
user = user.lower().strip()
text = mwparserfromhell.parse(text)
for tl in text.filter_templates():
if tl.name.matches(['bots', 'nobots']):
break
else:
return True
print "template found" #Have we found one
for param in tl.params:
bots = [x.lower().strip() for x in param.value.split(",")]
if param.name == 'allow':
print "We have an ALLOW" # allow found
if ''.join(bots) == 'none': return False
for bot in bots:
if bot in (user, 'all'):
return True
elif param.name == 'deny':
print "We have a DENY" # deny found
if ''.join(bots) == 'none':
print "none - true"
return True
for bot in bots:
if bot in (user, 'all'):
pnt(bot)
pnt(user)
print "all - false"
return False
if (tl.name.matches('nobots') and len(tl.params) == 0):
print "match - false"
return False
return True
def clearpages():
lastContinue=''
while True:
params = {'action':'query',
'prop':'templates',
'list':'embeddedin',
'eititle':'Template:BrokenImage',
'tllimit':'max',
'tlnamespace':'0',
'tlcontinue':lastContinue
}
req = api.APIRequest(site, params) #Set the API request
res = req.query(False) #Send the API request and store the result in res
print res
touse = pagelist.listFromQuery(site, res['query']['embeddedin'])#Make a list
print
print touse
for articlep in touse: #For page in the list
pagename=articlep.unprefixedtitle
pnt(pagename)
if pagename not in CM.DoneList:
print"removal"
pagepage = page.Page(site, pagename)
pagetext = pagepage.getWikiText()
pagetext = reTemplate.sub( '', pagetext)
pagetext=pagetext.lstrip()
try:
print "writing page"
#pagepage.edit(text=pagetext, bot=True, summary="(Task 12) Removing unneeded template ([[User:RonBot/12/Run|disable]])") #(DO NOT UNCOMMENT UNTIL BOT IS APPROVED)
except:
print "Cannot remove tag!"
pnt ("Done for %s" % articlep.unprefixedtitle) #For debugging
else:
print "Page not fixed"
if 'continue' not in res:
break
lastContinue = res['continue']['tlcontinue']
print "continue"
return
def findpages(cat):
lastContinue=''
while True:
params = {'action':'query',
'list':'categorymembers',
'cmtitle':cat,
'cmlimit':'max',
'cmnamespace':'0',
'cmcontinue':lastContinue
}
req = api.APIRequest(site, params) #Set the API request
res = req.query(False) #Send the API request and store the result in res
touse = pagelist.listFromQuery(site, res['query']['categorymembers'])#Make a list
#pnt(touse)
for articlep in touse: #For page in the list
pagename=articlep.unprefixedtitle
pnt(pagename)
pagepage = page.Page(site, pagename)
pagetext = pagepage.getWikiText()
CM.DoneList.append(pagename)
if not reTemplate.match(pagetext):
pagetext="{{BrokenImage}}\n"+pagetext
print "TagPage"
try:
print "writing page"
#pagepage.edit(text=pagetext, bot=True, summary="(Task 12) Adding {{BrokenImage}} ([[User:RonBot/12/Run|disable]])") #(DO NOT UNCOMMENT UNTIL BOT IS APPROVED)
except:
print "Cannot add tag!"
else:
print "Page Already Tagged"
print "----"
if 'continue' not in res:
break
lastContinue = res['continue']['cmcontinue']
print "continue"
return
def main():
go = startAllowed() #Check if task is enabled
if go=="run":
CM.DoneList=list()
findpages(name)
clearpages()
if __name__ == "__main__":
with warnings.catch_warnings():
warnings.simplefilter("ignore", FutureWarning)
main()