1 #!/usr/bin/env python2.4
2 # -*- encoding: iso-8859-1 -*-
3 # vim: set et sw=4 sts=4 :
10 from sercom.sqlo import *
12 def notificar(correccion):
14 from email.MIMEText import MIMEText
16 intento = correccion.intento
17 entrega = correccion.entrega
18 inscripto = correccion.inscripto
20 Se aceptó como entrega final de su ejercicio %d, entrega %d,
21 a su intento %d, recibido el %s.
22 ''' % (entrega.nroEjercicio, entrega.entrega, intento.numero, intento.llegada)
23 mail = MIMEText(body, 'plain', 'iso-8859-1')
24 mail['Subject'] = '[%s] Intento %d del ejericio %d.%d aceptado como ' \
25 'entrega final.' % (conf.get('mail', 'prefijo'), intento.numero,
26 entrega.nroEjercicio, entrega.entrega)
27 mail['From'] = conf.get('mail', 'from')
28 mail['To'] = inscripto.mail
29 mail['Reply-To'] = conf.get('mail', 'admin')
30 mail['Return-Path'] = conf.get('mail', 'admin')
31 mail['X-Mailer'] = 'sercom ' + sercom.VERSION
32 mail['X-Priority'] = '5'
33 smtp = smtplib.SMTP(conf.get('mail', 'smtp'))
34 smtp.sendmail(mail['From'], mail['To'], mail.as_string())
38 conf, conn, log = sercom.init('deliver')
41 # Utilizo el directorio de datos como base para todos los SQLObjects
42 sercom.sqlo.dir_base = conf.get('general', 'data_dir')
45 intervalo = float(conf.get('general', 'intervalo'))
47 # Busco entregas pendientes
48 for entrega in Entrega.getPendientes(conn):
49 log.debug('Hay una entrega pendiente: %d.%d.%d', entrega.curso.curso,
50 entrega.nroEjercicio, entrega.entrega)
51 while Intento.faltaCompilar(entrega, conn):
52 log.debug('Esperando que termine de compilar, faltan %d intentos',
53 Intento.faltaCompilar(entrega, conn))
55 log.info('Procesando entrega %d.%d.%d', entrega.curso.curso,
56 entrega.nroEjercicio, entrega.entrega)
57 for inscripto in Inscripto.selectBy(cursoID=entrega.cursoID, activo=True,
59 log.debug('Procesando inscripto: %s', inscripto)
60 intentos = list(Intento.select(
61 sercom.sqlo.AND(Intento.q.inscriptoID == inscripto.id,
62 Intento.q.entregaID == entrega.id),
63 orderBy=-Intento.q.numero, connection=conn))
65 for intento in intentos:
66 log.debug('Procesando intento: %s', intento)
67 # Si aprobó las pruebas públicas, está apto para corregir
68 if intento.pruebasPublicasPasadas:
69 correccion = Correccion(entrega=entrega, inscripto=inscripto,
70 intento=intento, docente=1, connection=conn) #XXX Docente dummy
73 log.info('Intento %d del alumno %d aceptado como entrega final.',
74 intento.numero, inscripto.padron)
76 # Si no tiene ningún intento 'entregable', es algo malo.
77 if intentos and no_entrega:
78 log.warn('El alumno con padrón %d tiene intentos para la ' \
79 'entrega %d.%d pero ninguno es aceptable', inscripto.padron,
80 entrega.nroEjercicio, entrega.entrega)
81 log.debug('Entrega finalizada')
82 entrega.finalizada = True
84 log.info('Finalizado')