User:Alex brolloBot/Python scripts/commons.py

# -*- coding: utf-8 -*-
#{{}}
from scripts import *
import os
import json
import time
commons=wikipedia.Site("commons","commons")
source=wikipedia.Site("it","wikisource")

def addCreator():
    nocat=[]
    l=source.allpages(namespace=102,includeredirects=False)
    for i in l:
        
        pagina=wikipedia.Page(commons,i.title().replace("Autore:","Category:"))
        print pagina.title()
        if pagina.exists():
            if not "{{Creator" in pagina.get():
                #print ("\n"+pagina.get())[:300]
                pagina.put("\n"+pagina.get(),comment="Adding a Template:Creator possible to the code")
                time.sleep(120)
		
        else:
            nocat.append(i)
    salva_pcl(nocat,"nocat","commons")
    return
    


    
def imagepage(nome):
    pagina=wikipedia.ImagePage(commons,nome)
    creator=pagina.getCreator()
    l=[]
    for i in pagina.globalUsage():
        l.append(i)
    return (pagina,creator,l)
    
def deleteRequest(l):
    users,free,problem=[],[],[]
    for i in l:
        page,user,used=imagepage(i)
        print page,user[0],len(used)
        if not user[0] in users:
            users.append(user[0])
        if len(used)==0:
            free.append(page)
        else:
            problem.append(page)
    result={"users":users,"free":free,"problem":problem}
    salva_pcl(result,"toDelete","")
    return result
    

def deleteTag():
    template=u"Template:Del/* */ete"
    l=carica_pcl("toDelete","")
    for pagina in l["free"][2:]:
        testo=pagina.get()
        testo=template+"\n"+testo
        pagina.put(testo,comment="Tagging for deletion by a bot waiting for flag.")
        # print testo
        # time.sleep(60)
    return
                   
        
		

itw=wikipedia.getSite("it","wikipedia")
enw=wikipedia.getSite("en","wikipedia")
frw=wikipedia.getSite("fr","wikipedia")
its=wikipedia.getSite("it")
def getAutData(pag):
    if pag.startswith("Indice:"):
        paginaIndice=wikipedia.Page(its,pag)
        datiIndice=parseTemplate(paginaIndice.get(),":MediaWiki")
        autore="Autore:"+datiIndice[0]["Autore"]
    elif pag.startswith("Autore:"):
        autore=pag
    else:
        print "Errore: inserire una pagina Indice o Autore"
        return
    paginaAutoreIts=wikipedia.Page(its,autore)
    autoreItw=parseTemplate(paginaAutoreIts.get(),"Autore")[0]["Nome della pagina su Wikipedia"]
    paginaAutoreItw=wikipedia.Page(itw,autoreItw)
    datiAutoreItw=parseTemplate(paginaAutoreItw.get(),"Bio")
    datiAutoreEnw=""
    datiAutoreFrw=""
    for i in paginaAutoreItw.interwiki():
        if i.site().language()=="en":
            datiAutoreEnw=parseTemplate(i.get(),"Infobox")
        elif i.site().language()=="fr":
            datiAutoreFrw=parseTemplate(i.get(),"Infobox")
    return json.dumps({"it":datiAutoreItw,"en":datiAutoreEnw,"fr":datiAutoreFrw})
    
    


def parseTemplate(testo,template):
    template=template[0:1].lower()+template[1:]
    testo=testo.replace("{{"+template[0:1].upper()+template[1:],\
        "{{"+template[0:1].lower()+template[1:])
    templ=find_stringa(testo,"Template:"+template,"",1,"{{")[2:-2]
    el=produci_lista(templ,"Template:","",1,"{{")+\
        produci_lista(templ,"","",1,"[[")+\
        produci_lista(templ,"{|","|}",1,"{|")
    for i in el:
        templ=templ.replace(i,i.replace("|","[$]"),1)
    templ=templ.split("|")
    for i in range(len(templ)):
        templ[i]=templ[i].strip().replace("[$]","|")
    d={}
    l=[]
    n=0
    for i in templ:
        i=i.split("=",1)
        for j in range(len(i)):
            i[j]=i[j].strip()
        if len(i)==1:
            d[str(n)]=i[0]
            l.append(str(n))
            n+=1
        else:
            d[i[0]]=i[1]
            l.append(i[0])

    return (d,l)

def rewriteTemplate(objTemplate):
    l=objTemplate[1]
    d=objTemplate[0]
    n=0
    t=""
    for i in l:
        if i=="0":
            t+="{{"+d["0"]+"\n"
            n+=1
        else:
            if i==str(n):
                t+=" | "+d[i]+"\n"
                n+=1
            else:
                t+=" | "+i+" = "+d[i]+"\n"
    t+= "}}"+"\n"
    return t


def dicIndice(base):
    testo=unicode(html("Indice:"+base),"utf-8")
    tipo=base[base.rfind("."):]
    testo= "\n".join(produci_lista(testo,"<td","",1))
    l=produci_lista(testo,'<a href="//it.wikisource.org/wiki/Pagina:',"</a>",1)
    
    d={}
    for i in l:
        d[find_stringa(i,tipo+"/",'"')]=i\
            .replace('0',"") \
            .replace('00',"") \
            .replace('000',"") \
            .replace("<","|<")\
            .replace(">",">|")\
            .split("|")[2]
    return d
	
    


# def getReferences(self, follow_redirects=True, withTemplateInclusion=True,
#            onlyTemplateInclusion=False, redirectsOnly=False, internal = False)


def getRef(pagina,withTemplateInclusion=True,onlyTemplateInclusion=True):
    lista=[]
    l=pagina.getReferences(follow_redirects=False, withTemplateInclusion=withTemplateInclusion,\
            onlyTemplateInclusion=onlyTemplateInclusion, redirectsOnly=False, internal = False)
    for i in l:
        lista.append(i)
        
    return lista

def files_in_cat(category_name):
    
    site=commons
    #site = wikipedia.getSite()
    cat = catlib.Category(site,'Category:'+category_name)
    gen = pagegenerators.CategorizedPageGenerator(cat)
    return gen

class Book:
    def __init__(self, base):
        # calling parseInformation()
        # retrieves File: description page and gives a "skeleton" of it where relevant information
        # is replaced with a placeholder
        
        
        fileText,information,book,categories,licences,indice=parseInformation(base)
        self.base=base                # base name of File: and Indice:
        self.information=information  # parsetemplate object from parsing of :MediaWiki:Proofreadpage_index_template
                                      # stored into it.wikisource Indice: page
        self.categories=categories    # list of categories
        self.licences=licences        # list of template licences
        self.book=book                # parseTemplate obiect from parsing of Book template
        self.indice=indice            # parsetemplate object from parsinng of Information template
        self.fileText=fileText        # File: description page "skeleton"
    


def parseInformation(base):
    indexPage=wikipedia.Page(source,"Indice:"+base)
    indexData=parseTemplate(indexPage.get(),":MediaWiki:Proofreadpage_index_template")
    
    fileText=wikipedia.Page(commons,"File:"+base).get()\
              .replace("{{information","{{Information")\
              .replace("{{book","{{Book")
    information=find_stringa(fileText,"Template:Information","",1,"{{")
    book=find_stringa(fileText,"Template:Book","",1,"{{")
    
    if information !="":
        fileText=fileText.replace(information,"<information>")
        information=parseTemplate(information,"Information")
    if book !="":
        fileText=fileText.replace(book,"<book>")
        book=parseTemplate(book,"Book")    
    
    categories=produci_lista(fileText,"Category","",2)
    if len(categories)>0:
        fileText=fileText.replace(categories[0],"<categories>")

    if len(categories)>1:
        for i in categories[1:]:
            fileText=fileText.replace(i,"")
    licences=produci_lista(fileText,"Template:PD","",1,"{{")
    if len(licences)>0:
        fileText=fileText.replace(licences[0],"<licences>")

    if len(licences)>1:
        for i in licences[1:]:
            fileText=fileText.replace(i,"")
    
    return fileText,information,book,categories,licences,indexData

def newBook(indexData,fileInformation):
    fileBook={"0":"Book"}
              
    for i in [u'Author', u'Translator', u'Editor', u'Illustrator', u'Title', u'Subtitle', \
        u'Series title', u'Volume', u'Edition', u'Publisher', u'Printer', u'Date', u'City', \
        u'Language', u'Description', u'Source', u'Permission', u'Image', u'Image page', \
        u'Pageoverview', u'Wikisource', u'Homecat', u'Other_versions', u'ISBN', u'LCCN', \
        u'OCLC']:
        fileBook[i]=i
    return fileBook