# -*- coding: utf-8 -*-
import re
from datetime import datetime
import wikipedia
from query import GetData as GetApi
class Usuario(object):
def __init__(self, nombre):
self.nombre = nombre
params = {
"action": "query",
"list": "users|usercontribs",
"ususers": nombre,
"usprop": "editcount",
"ucuser": nombre,
"ucdir": "newer",
"ucprop": "timestamp",
"uclimit": 1,
}
self._datos = GetApi(params, site)
def no_existe(self):
return self._datos['query']['users'][0].has_key("missing")
def contribuciones(self):
return self._datos['query']['users'][0]['editcount']
def primera_contribucion(self):
return datetime.strptime(self._datos['query']['usercontribs'][0]['timestamp'], "%Y-%m-%dT%H:%M:%SZ")
class Candidatura(object):
def __init__(self, usuario, proponente):
self.usuario = usuario
self.proponente = proponente
self.cuenta = Usuario(usuario)
self.pagina = wikipedia.Page(site, u"Wikipedia:Candidaturas a bibliotecario/%s" % usuario)
def info(self):
wikipedia.output(
u"%s tiene %i desde el %s" % (
self.usuario,
self.cuenta.contribuciones(),
datetime.strftime(self.cuenta.primera_contribucion(), "%Y-%m-%d %H:%M")
)
)
def crear_candidatura(self):
txt_CAB = u"{{subst:Votar bibliotecario1|%(usuario)s|%(proponente)s|%(date1)s|%(primcontr1)s|%(contribs)i|Votación abierta|{{subst:CURRENTTIME}}}}" % self.datos
if not test: self.pagina.put(txt_CAB, u"Creando CAB para [[Usuario:%(usuario)s|%(usuario)s]]" % self.datos)
def crear_discusion(self):
txt_discu_CAB = u"{{subst:Votar bibliotecario2|%(usuario)s|%(proponente)s|%(date2)s|%(primcontr2)s|%(contribs)i|Votación abierta|{{subst:CURRENTTIME}}}}" % self.datos
pagina_discusion = wikipedia.Page(site, u"Wikipedia discusión:Candidaturas a bibliotecario/%s" % usuario)
if not test: pagina_discusion.put(txt_discu_CAB, u"Creando página de discusión para la CAB de [[Usuario:%(usuario)s|%(usuario)s]]" % self.datos)
def actualizar_tabla(self):
plantilla_tabla = u"{{CandidaturaBibliotecario|%(usuario)s|%(proponente)s|%(date1)s|%(primcontr1)s|%(contribs)i|color=#FFFFCC}}" % self.datos
tabla = wikipedia.Page(site, "Wikipedia:Candidaturas a bibliotecario/Tabla")
txt_tabla_actual = tabla.get()
inicio = u"<!-- **** AGREGA UNA NUEVA CANDIDATURA DEBAJO DE ESTA LÍNEA **** -->"
txt_tabla_actual = re.sub("(?s)(%s\s+)" % inicio, ur"\1%s" % plantilla_tabla, txt_tabla_actual)
candidaturas = re.findall("\{\{ *[Cc]andidaturaBibliotecario *\|", txt_tabla_actual)
if not test: tabla.put(txt_tabla_actual, u"Agregando a: [[Usuario:%(usuario)s|%(usuario)s]]" % self.datos)
def actualizar_num_CAB(self):
pagina_numero = wikipedia.Page(site, u"Wikipedia:Candidaturas a bibliotecario/número")
texto = pagina_numero.get()
numero = re.search("</noinclude>(\d+)", texto)
numero = int(numero.group(1))
numero += 1
if not test: pagina_numero.put(re.sub("(</noinclude>)\d+", ur"\1%i" % numero, texto), u"Bot: Actualizando número de CAB: %i" % numero)
def principal(self):
if self.cuenta.no_existe():
wikipedia.output("el usuario no existe")
return
if Usuario(self.proponente).no_existe():
wikipedia.output("el proponente no existe")
return
self.datos = {
"usuario": self.usuario,
"proponente": self.proponente,
"primcontr1": datetime.strftime(self.cuenta.primera_contribucion(), "%d/%m/%Y"),
"primcontr2": datetime.strftime(self.cuenta.primera_contribucion(), "%d|%m|%Y"),
"contribs": self.cuenta.contribuciones(),
"date1": "{{subst:CURRENTDAY}}/{{subst:CURRENTMONTH}}/{{subst:CURRENTYEAR}}",
"date2": "{{subst:CURRENTDAY}}|{{subst:CURRENTMONTH}}|{{subst:CURRENTYEAR}}"
}
if info:
self.info()
if not self.pagina.exists():
self.crear_candidatura()
self.crear_discusion()
self.actualizar_tabla()
#self.actualizar_num_CAB()
else:
wikipedia.output(u"El usuario tiene una candidatura previa, por favor trasládela y solicite el borrado de esta página antes de crear una nueva")
if __name__ == '__main__':
args = wikipedia.handleArgs()
site = wikipedia.getSite()
test= True if "--test" in args or "-t" in args else False
info= True if "--info" in args or "-i" in args else False
c = Candidatura(args[0], args[1])
c.principal()
wikipedia.stopme()