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

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