Integrar Tester para que procese las entregas.
Finalmente se opta por obtener Entregas de la DB que tengan fecha de inicio=None
directamente. Se mantiene la interfaz de cola, siendo Queue la encargada de
obtener los ids bloqueando.
Bugfix: El zip se subía roto en las entregas.
Al parecer al usar el ZipFile con el file object que viene por request, le leía
las cabeceras, avanzando el puntero, y lo rompía. Para evitarlo se lee el
archivo una vez en memoria y se opera con el buffer en memoria. Además se agrega
chequeo de CRC.
No poner fecha de inicio now() por default en Ejecucion.
Como Entrega hereda de ejecución, ya no parece lo más natura que inicio tenga
como default la fecha de creación.
Priorizar archivos del caso de prueba sobre los del comando.
Si un CasoDePrueba tiene algún archivo_a_comparar o archivo_entrada que está
también en algún ComandoPrueba del Enunciado al que pertenece, se priorizan los
archivos del CasoDePrueba.
Generalizar ejecutar_tarea_xxx().
También se elimina Tarea.rechazar_si_falla y Tarea.terminar_si_falla, pasando
a ser una simple tabla de relación porque no tenía mucho sentido tanto
anidamiento de funcionalidad.
Crear clase Ejecucion y heredar Entrega y ComandoEjecutado de ella.
Para implementar las pruebas, me es muy conveniente que Prueba y Entrega tengan
una interfaz similar, y siendo que Entrega tiene prácticamente los mismos campos
que ComandoEjecutado (de quien hereda Prueba), creé una superclase que engloba
los campos en comun, Ejecucion. Es necesario regenerar la DB (una vez más :).
Agregar comentario para recordar qucorregir algo.
El tiempo de ejecución de un comando debería medir sólo la ejecución (no el
unzip, rsync, diff y otras tareas), pero por ahora uso el id de ComandoEjecutado
de forma temprana (no debería) y por eso lo creo antes.
Bugfix: no trata de guardar 2 veces el stdout/err, honra rechazar_si_falla y otros.
También evita crear un zip vacío si no hay archivos_a_guardar y honra el
Comando.terminar_si_falla.
tailor [Sun, 11 Mar 2007 22:36:04 +0000 (22:36 +0000)]
mergeador de grupos
* Pantalla para mezclar los grupos. Solo se puede acceder desde la edicion de un
curso, porque solo se puede trabajar con grupos de un solo curso.
* Crea nuevos cursos si es necesario, elimina los que quedan vacios.
* Todavia tiene algunos bugs.. Pero mas o menos anda.
Unfixes de unicode para evitar bug de Python (!?).
Saco unicode porque parece haber algún bug loco en Python con excepciones con
unicode. Ver bug report:
http://sourceforge.net/tracker/index.php?func=detail&aid=1678647&group_id=5470&atid=105470
Cambiar RET_FAIL para que sea signal-friendly.
Si retorno es negativo, se espera que el programa termine con una señal de
número igual a -retorno. Por eso RET_FAIL mejor definirlo con un valor inválido
para señales.
Modifico permisos en Enunciado y Ejercicio para que un Entregador pueda consultarlos.
Los permisos ahora por default son para entregar y todos los metodos administrativos fueron
cerrados para admin. El Entregador solo puede listar y show y de esta forma puede bajar los
enunciados, ver las fechas de entrega, etc. Se ocultan columnas de las tablas que no son necesarias
y se sacan links cuando el usuario no es ADMIN.
Mejorar función unzip().
Ahora unzip() soporta un parámetro extra, que es un diccionario que indica donde
descomprimir ciertos archivos en particular, si no se los quiere descomprimir en
el path por default especificado.
Agregar nombres especiales para stdin, stdout, stderr y stdouterr.
Se agregan constantes para poder cambiar fácilmente el nombre de los archivos
especiales y se agrega el archivo especial stdouterr, que sirve para indicar que
se quiere guardar stdout y stderr todos juntos (entrelazados) en un mismo
archivo.
Agrego metodos selectByAlumno a clases donde son utiles.
La UI pregunta muchas cosas y se tiene como identity un Alumno y estos
metodos simplifican la vida :)
Si el ejercicio es Grupal pongo como Entregador el grupo del Alumno
Queda por filtrar que el Grupo sea del mismo Cuatrimestre que el Ejercicio
y esas cosas.
Tambien tengo que resolver como mostrar las Entregas que se hicieron tanto
individuales como Grupales (estas ultimas NO se ven ahora por mas que se registren)
agrego un zip de prueba para las Entregas
Es un archivo "vacio" chiquito para probar que se suba el archivo y se valide
que sea ZIP, no es una entrega :)
Agregar archivos a guardar y a comparar en el modelo.
Ahora Comando tiene archivos_a_guardar (una lista de nombre de archivos) y
archivos_a_comparar (un ZIP con el contenido de los archivos con resultados
esperados a comparar con los resultados obtenidos), en vez del archivos_salida.
ComandoEjecutado tiene, por su parte, archivos_comparados y archivos_guardados,
conteniendo los diff y archivos a guardar respectivamente.
Como CasoDePrueba y Prueba heredan de los ComandoXxx, se extiende a ellos.
Heredar a Prueba de ComandoEjecutado.
De la misma forma que CasoDePrueba hereda de Comando por razones puramente
funcionales, ahora Prueba hereda de ComandoEjecutado.
Ejecutar comandos con shell y almacenarlos como strings.
Se eliminar todo lo relacionado con Parametros (ParamValidator, modulo
sercom.validators -que tenía sólo eso-, ParamCol, etc.) y se almacenan los
comandos como simples string porque ahora se ejecutan los comandos usando el
shell. La razón para no hacer esto en el sistema viejo era la carencia de un
chroot completo, cosa que ahora sí tiene el sistema. Esto además de simplificar
el modelo de datos, hace mucho más flexible la especificación de comandos/casos
de prueba, ya que se pueden utilizar cosas propias del shell (como el glob).