X-Git-Url: https://git.llucax.com/software/sercom-old.git/blobdiff_plain/44941ea0c8336d1b0241fc3e09051ef5fe25b1c8..a9db9840ef35d1c1450d0a97fbfbf2b308474c73:/src/sc_deliver diff --git a/src/sc_deliver b/src/sc_deliver index 67ec78d..3979a86 100755 --- a/src/sc_deliver +++ b/src/sc_deliver @@ -2,6 +2,8 @@ # -*- encoding: iso-8859-1 -*- # vim: set et sw=4 sts=4 : +# Módulos estándar +import time # Módulos locales import sercom import sercom.sqlo @@ -26,7 +28,7 @@ a su intento %d, recibido el %s. mail['To'] = inscripto.mail mail['Reply-To'] = conf.get('mail', 'admin') mail['Return-Path'] = conf.get('mail', 'admin') - mail['X-Mailer'] = 'sercom 0.3' + mail['X-Mailer'] = 'sercom ' + sercom.VERSION mail['X-Priority'] = '5' smtp = smtplib.SMTP(conf.get('mail', 'smtp')) smtp.sendmail(mail['From'], mail['To'], mail.as_string()) @@ -39,25 +41,39 @@ log.info('Iniciado') # Utilizo el directorio de datos como base para todos los SQLObjects sercom.sqlo.dir_base = conf.get('general', 'data_dir') +# Atajo +intervalo = float(conf.get('general', 'intervalo')) + # Busco entregas pendientes for entrega in Entrega.getPendientes(conn): + while Intento.faltaCompilar(entrega, conn): + time.sleep(intervalo) log.info('Procesando entrega %d.%d.%d', entrega.curso.curso, entrega.nroEjercicio, entrega.entrega) for inscripto in Inscripto.selectBy(cursoID=entrega.cursoID, activo=True, connection=conn): log.debug('Procesando inscripto: %s', inscripto) - for intento in Intento.select(sercom.sqlo.AND( - Intento.q.inscriptoID == inscripto.id, Intento.q.entregaID == entrega.id), - orderBy=-Intento.q.numero, connection=conn): + intentos = list(Intento.select( + sercom.sqlo.AND(Intento.q.inscriptoID == inscripto.id, + Intento.q.entregaID == entrega.id), + orderBy=-Intento.q.numero, connection=conn)) + no_entrega = True + for intento in intentos: log.debug('Procesando intento: %s', intento) # Si aprobó las pruebas públicas, está apto para corregir if intento.pruebasPublicasPasadas: correccion = Correccion(entrega=entrega, inscripto=inscripto, intento=intento, docente=1, connection=conn) #XXX Docente dummy notificar(correccion) + no_entrega = False log.info('Intento %d del alumno %d aceptado como entrega final.', intento.numero, inscripto.padron) break + # Si no tiene ningún intento 'entregable', es algo malo. + if intentos and no_entrega: + log.warn('El alumno con padrón %d tiene intentos para la ' \ + 'entrega %d.%d pero ninguno es aceptable', inscripto.padron, + entrega.nroEjercicio, entrega.entrega) log.debug('Entrega finalizada') entrega.finalizada = True