User:RonBot/10/Source1
This is the original program, it was later (on request) split into two parts to better task each page. See
CITconfig.py
inputlist=list()
outputlist=list()
partlist=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 CITconfig
site = wiki.Wiki() #Tell Python to use the English Wikipedia's API
site.login(userpassbot.username, userpassbot.password) #login
- 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/10/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 remove_duplicates(l):
return list(set(l))
def getandsort(x):
print "getandsort"
CITconfig.partlist=list()
line = CITconfig.inputlist[x]
while line<>"}}":
if len(line)>2:
CITconfig.partlist.append(line)
x=x+1
line = CITconfig.inputlist[x]
print "before dup rem", len(CITconfig.partlist)
CITconfig.partlist=remove_duplicates(CITconfig.partlist)
print "after dup rem", len(CITconfig.partlist)
#pnt(CITconfig.partlist)
CITconfig.partlist=sorted(CITconfig.partlist, key=str.lower) #sorts using lowercase key
#pnt(CITconfig.partlist)
#print CITconfig.inputlist[x] #should be "}}"
for line in CITconfig.partlist: #transfer sorted section
CITconfig.outputlist.append(line)
return x
def Process(search):
print "search", search
pagetitle = search
pagetitletext = pagetitle.encode('utf-8')
pnt(pagetitletext)
pagepage = page.Page(site, pagetitle)
print "pagepage"
pagetext = pagepage.getWikiText()
CITconfig.inputlist = list()
CITconfig.outputlist = list()
CITconfig.inputlist=pagetext.splitlines()
size=len(CITconfig.inputlist)
print "SIZE=", size
stop = allow_bots(pagetext, "RonBot")
if not stop:
return
x=0
while x line=CITconfig.inputlist[x] #print x, #pnt(line) CITconfig.outputlist.append(line) if "columns-list" in line: # Start of a section print "X IN", (x+1) z=getandsort(x+1) #x+1 is the line to start with print "X OUT", z x=z-1 x=x+1 pagetext='' # clear ready assemble new page for line in CITconfig.outputlist: pagetext=pagetext+line+"\n" try: pagepage.edit(text=pagetext, bot=True, summary="(Task 10 sorting lists") #(DO NOT UNCOMMENT UNTIL BOT IS APPROVED) print pagetext print "writing changed page" except: print"Failed to write" print "" return def main(): go = startAllowed() #Check if task is enabled if go == "no": sys.exit('Disabled Task') #parameters for API request search='User:JL-Bot/Questionable.cfg' Process(search) search='User:JL-Bot/Citations.cfg' Process(search) if __name__ == "__main__": with warnings.catch_warnings(): warnings.simplefilter("ignore", FutureWarning) main()