Revisión 182
Añadido por jredrejo hace casi 14 años
controlies/trunk/debian/changelog | ||
---|---|---|
controlies (0.4-1) unstable; urgency=low
|
||
|
||
* Añadida funcionalidad de rayuela a ldap
|
||
|
||
-- José L. Redrejo Rodríguez <jredrejo@debian.org> Thu, 30 Jun 2011 14:03:14 +0200
|
||
|
||
controlies (0.3-3) unstable; urgency=low
|
||
|
||
* Añade profesores al grupo teachers y alumnos al students
|
controlies/trunk/applications/controlies/controllers/usuarios.py | ||
---|---|---|
def index():
|
||
return dict()
|
||
|
||
|
||
@service.json
|
||
@auth.requires_login()
|
||
def list():
|
controlies/trunk/applications/controlies/controllers/gestion.py | ||
---|---|---|
from applications.controlies.modules.Rayuela2Ldap import Rayuela
|
||
import applications.controlies.modules.Utils.LdapUtils as LdapUtils
|
||
|
||
|
||
@service.json
|
||
@auth.requires_login()
|
||
def servidores_aula():
|
||
... | ... | |
@auth.requires_login()
|
||
def rayuela():
|
||
import StringIO
|
||
if not "archivos" in session.keys():
|
||
session.archivos=[]
|
||
form=SQLFORM.factory(Field('principiocurso','boolean',default=False ),submit_button='Enviar')
|
||
if form.accepts(request.vars, session):
|
||
response.flash = 'Procesando datos, espere'
|
||
... | ... | |
lista_completa +=[("--",)]
|
||
|
||
session.archivos=[]
|
||
LdapUtils.sanea_grupos(l)
|
||
#LdapUtils.sanea_grupos(l)
|
||
l.close()
|
||
|
||
#generamos el archivo de salida
|
||
... | ... | |
#
|
||
# Re-arange file
|
||
#
|
||
|
||
filename=file.replace(' ','_')
|
||
filepath=parentpath+filename
|
||
f = open(filepath, 'wb')
|
||
data=request.body.read()
|
||
f.write(data)
|
||
f.close()
|
||
|
||
session.archivos.append(filepath)
|
||
|
||
print session.archivos
|
controlies/trunk/applications/controlies/modules/Rayuela2Ldap.py | ||
---|---|---|
self.esAlumnos=False
|
||
self.ldap_con =conexion
|
||
self.usuarios=[]
|
||
self.dni_usuarios=[]
|
||
self.archivo=archivo
|
||
|
||
|
||
... | ... | |
"""Convierte la foto del alumno a un tamaño pequeño y
|
||
en un formato gráfico aceptable en ldap"""
|
||
archivo=os.path.join("/tmp/rayuela-ldap/",grafico)
|
||
im = Image.open(archivo)
|
||
im.thumbnail((60,80), Image.ANTIALIAS)
|
||
if im.mode != "RGB":
|
||
im = im.convert("RGB")
|
||
buf= StringIO.StringIO()
|
||
try:
|
||
im.save(buf, format= 'JPEG')
|
||
resultado=buf.getvalue()
|
||
except Exception,e:
|
||
im = Image.open(archivo)
|
||
im.thumbnail((60,80), Image.ANTIALIAS)
|
||
if im.mode != "RGB":
|
||
im = im.convert("RGB")
|
||
buf= StringIO.StringIO()
|
||
try:
|
||
im.save(buf, format= 'JPEG')
|
||
resultado=buf.getvalue()
|
||
except Exception,e:
|
||
return None
|
||
except:
|
||
return None
|
||
|
||
return resultado
|
||
|
||
|
||
... | ... | |
usuario[info.nodeName]=self.asegura_codigos(dato)
|
||
|
||
self.usuarios.append(usuario)
|
||
self.dni_usuarios.append(usuario["dni"])
|
||
|
||
|
||
def parsea_archivo(self,archivo_xml,tipo):
|
||
... | ... | |
def lista_antiguos(self,grupo):
|
||
"""Devuelve el listado de los dni de los usuarios que ya estaban en ldap antes"""
|
||
lista={}
|
||
try:
|
||
resultado=self.ldap_con.search("ou=Group","cn=" + grupo ,["memberuid"])
|
||
|
||
miembros=resultado[0][0][1]['memberUid']
|
||
if len(miembros) > 0:
|
||
for usuario in miembros:
|
||
dato=self.ldap_con.search("ou=People","uid=" + usuario ,["employeeNumber","uid"])
|
||
if len(dato) > 0:
|
||
dni=dato[0][0][1]['employeeNumber'][0]
|
||
uid=dato[0][0][1]['uid'][0]
|
||
home="/home/" + grupo
|
||
comparar=home[:13]
|
||
|
||
#resultado=self.ldap_con.search("ou=Group","cn=" + grupo ,["memberuid"])
|
||
resultado=self.ldap_con.search("ou=People","objectClass=person" , ["employeeNumber","uid","homeDirectory"])
|
||
miembros=[]
|
||
for i in resultado:
|
||
if i[0][1]['homeDirectory'][0][:13]==comparar: miembros.append(i)
|
||
|
||
if len(miembros) > 0:
|
||
for dato in miembros:
|
||
if len(dato) > 0:
|
||
try:
|
||
dni=dato[0][1]['employeeNumber'][0]
|
||
uid=dato[0][1]['uid'][0]
|
||
lista[dni]=uid
|
||
|
||
except:
|
||
pass
|
||
except:
|
||
continue
|
||
|
||
return lista
|
||
|
||
... | ... | |
def borra_antiguos(self,viejos):
|
||
"""Borra de la base de datos de ldap a los usuarios que estaban
|
||
en la lista de viejos y no están en la de nuevos"""
|
||
borrables={}
|
||
|
||
for usuario in self.usuarios:
|
||
if usuario['dni'] in viejos:
|
||
viejos.pop(usuario['dni'])
|
||
|
||
for viejo in viejos:
|
||
for usuario in viejos:
|
||
if not usuario in self.dni_usuarios:
|
||
borrables[usuario]=viejos[usuario]
|
||
|
||
for viejo in borrables:
|
||
try:
|
||
self.ldap_con.delete('uid='+ viejos[viejo] +',ou=People')
|
||
self.ldap_con.delete("cn="+ viejos[viejo] +",ou=Group")
|
||
self.ldap_con.delete('uid='+ borrables[viejo] +',ou=People')
|
||
self.ldap_con.delete("cn="+ borrables[viejo] +",ou=Group")
|
||
except:
|
||
pass #algún dato ya estaba borrado
|
||
|
||
|
||
|
||
def gestiona_archivo(self):
|
||
"""Función principal que a partir del archivo hace todo en ldap"""
|
||
|
||
... | ... | |
if intento!="":
|
||
print "PROBLEMAS",intento
|
||
else:
|
||
usuarios_antiguos=self.lista_antiguos("alumnos")
|
||
self.parsea_archivo("/tmp/rayuela-ldap/Alumnos.xml","alumno")
|
||
aulas=self.lista_grupos(self.usuarios,"grupo")
|
||
|
||
else:
|
||
usuarios_antiguos=self.lista_antiguos("profesor")
|
||
self.parsea_archivo(self.archivo,"profesor")
|
||
dptos=self.lista_grupos(self.usuarios,"departamento","SIN_DPTO")
|
||
|
||
... | ... | |
total=self.crea_usuarios()
|
||
|
||
if self.esAlumnos:
|
||
usuarios_antiguos=self.lista_antiguos("students")
|
||
|
||
|
||
LdapUtils.clean_students(self.ldap_con )
|
||
self.rellena_students()
|
||
self.usuarios_grupos(aulas)
|
||
else:
|
||
usuarios_antiguos=self.lista_antiguos("teachers")
|
||
|
||
LdapUtils.clean_teachers(self.ldap_con )
|
||
self.rellena_teachers()
|
||
self.usuarios_grupos(dptos)
|
||
|
||
|
||
if self.borrando:
|
||
self.borra_antiguos(usuarios_antiguos)
|
||
|
||
... | ... | |
pass #problema de permisos o directorio ya creado
|
||
|
||
archivo="/opt/instituto/santaeulalia/ExportacionDatosAlumnado.zip"
|
||
archivo="/tmp/ExportacionDatosProfesorado.xml"
|
||
archivo="/tmp/ExportacionDatosAlumnado.zip"
|
||
|
||
rayuela=Rayuela(ldap_con,archivo,True)
|
||
todos=rayuela.gestiona_archivo()
|
controlies/trunk/applications/controlies/modules/LdapConnection.py | ||
---|---|---|
print "error"
|
||
except ldap.NO_SUCH_OBJECT:
|
||
print "no_such_object"
|
||
except Exception,e:
|
||
print e
|
||
|
||
return True
|
||
|
Exportar a: Unified diff
Último commit