]> git.llucax.com Git - software/sercom-old.git/blob - src/sc_deliver
67ec78d838e637d68a5cbf8602f2913c53d270c6
[software/sercom-old.git] / src / sc_deliver
1 #!/usr/bin/env python2.4
2 # -*- encoding: iso-8859-1 -*-
3 # vim: set et sw=4 sts=4 :
4
5 # Módulos locales
6 import sercom
7 import sercom.sqlo
8 from sercom.sqlo import *
9
10 def notificar(correccion):
11     global conf
12     from email.MIMEText import MIMEText
13     import smtplib
14     intento = correccion.intento
15     entrega = correccion.entrega
16     inscripto = correccion.inscripto
17     body = '''
18 Se aceptó como entrega final de su ejercicio %d, entrega %d,
19 a su intento %d, recibido el %s.
20 ''' % (entrega.nroEjercicio, entrega.entrega, intento.numero, intento.llegada)
21     mail = MIMEText(body, 'plain', 'iso-8859-1')
22     mail['Subject'] = '[%s] Intento %d del ejericio %d.%d aceptado como ' \
23         'entrega final.' % (conf.get('mail', 'prefijo'), intento.numero,
24         entrega.nroEjercicio, entrega.entrega)
25     mail['From'] = conf.get('mail', 'from')
26     mail['To'] = inscripto.mail
27     mail['Reply-To'] = conf.get('mail', 'admin')
28     mail['Return-Path'] = conf.get('mail', 'admin')
29     mail['X-Mailer'] = 'sercom 0.3'
30     mail['X-Priority'] = '5'
31     smtp = smtplib.SMTP(conf.get('mail', 'smtp'))
32     smtp.sendmail(mail['From'], mail['To'], mail.as_string())
33     smtp.close()
34
35 # Inicializo
36 conf, conn, log = sercom.init('deliver')
37 log.info('Iniciado')
38
39 # Utilizo el directorio de datos como base para todos los SQLObjects
40 sercom.sqlo.dir_base = conf.get('general', 'data_dir')
41
42 # Busco entregas pendientes
43 for entrega in Entrega.getPendientes(conn):
44     log.info('Procesando entrega %d.%d.%d', entrega.curso.curso,
45         entrega.nroEjercicio, entrega.entrega)
46     for inscripto in Inscripto.selectBy(cursoID=entrega.cursoID, activo=True,
47             connection=conn):
48         log.debug('Procesando inscripto: %s', inscripto)
49         for intento in Intento.select(sercom.sqlo.AND(
50                 Intento.q.inscriptoID == inscripto.id, Intento.q.entregaID == entrega.id),
51                 orderBy=-Intento.q.numero, connection=conn):
52             log.debug('Procesando intento: %s', intento)
53             # Si aprobó las pruebas públicas, está apto para corregir
54             if intento.pruebasPublicasPasadas:
55                 correccion = Correccion(entrega=entrega, inscripto=inscripto,
56                     intento=intento, docente=1, connection=conn) #XXX Docente dummy
57                 notificar(correccion)
58                 log.info('Intento %d del alumno %d aceptado como entrega final.',
59                     intento.numero, inscripto.padron)
60                 break
61     log.debug('Entrega finalizada')
62     entrega.finalizada = True
63