Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 182

Añadido por jredrejo hace casi 14 años

Último commit

Ver diferencias:

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