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.
terminar_si_falla=True, rechazar_si_falla=True)
cf = tf.add_comando(1, 'make tito', retorno=0, max_cant_archivos=15,
max_cant_procesos=100, terminar_si_falla=True, rechazar_si_falla=True,
terminar_si_falla=True, rechazar_si_falla=True)
cf = tf.add_comando(1, 'make tito', retorno=0, max_cant_archivos=15,
max_cant_procesos=100, terminar_si_falla=True, rechazar_si_falla=True,
+ archivos_a_guardar=('__stdout__', '__stderr__'),
descripcion='Compila un programa en C con make ' \
'sin usar un Makefile (debe ser un solo archivo que se llame tito.c)')
tp = TareaPrueba(nombre='Probar', terminar_si_falla=True,
descripcion='Compila un programa en C con make ' \
'sin usar un Makefile (debe ser un solo archivo que se llame tito.c)')
tp = TareaPrueba(nombre='Probar', terminar_si_falla=True,
+# TODO Esto debería implementarse con CSV para mayor legibilidad
class TupleValidator(PickleValidator):
"""
Validator for tuple types. A tuple type is simply a pickle type
class TupleValidator(PickleValidator):
"""
Validator for tuple types. A tuple type is simply a pickle type
terminar_si_falla = BoolCol(notNone=True, default=True)
rechazar_si_falla = BoolCol(notNone=True, default=True)
archivos_entrada = BLOBCol(default=None) # ZIP con archivos de entrada
terminar_si_falla = BoolCol(notNone=True, default=True)
rechazar_si_falla = BoolCol(notNone=True, default=True)
archivos_entrada = BLOBCol(default=None) # ZIP con archivos de entrada
- # stdin es caso especial
- archivos_salida = BLOBCol(default=None) # ZIP con archivos de salida
- # stdout y stderr son especiales
+ # __stdin__ es caso especial
+ archivos_a_comparar = BLOBCol(default=None) # ZIP con archivos de salida
+ # __stdout__ y __stderr__
+ # son casos especiales
+ archivos_a_guardar = TupleCol(notNone=True, default=())
+ # __stdout__ y __stderr__
+ # son casos especiales
activo = BoolCol(notNone=True, default=True)
def __repr__(self, clave='', mas=''):
activo = BoolCol(notNone=True, default=True)
def __repr__(self, clave='', mas=''):
class ComandoEjecutado(InheritableSQLObject): #{{{
# Campos
class ComandoEjecutado(InheritableSQLObject): #{{{
# Campos
- inicio = DateTimeCol(notNone=True, default=DateTimeCol.now)
- fin = DateTimeCol(default=None)
- exito = IntCol(default=None)
- observaciones = UnicodeCol(notNone=True, default=u'')
+ inicio = DateTimeCol(notNone=True, default=DateTimeCol.now)
+ fin = DateTimeCol(default=None)
+ exito = IntCol(default=None)
+ archivos_comparados = BLOBCol(default=None) # ZIP con archivos diff
+ archivos_guardados = BLOBCol(default=None) # ZIP con archivos guardados
+ observaciones = UnicodeCol(notNone=True, default=u'')
def __repr__(self, clave='', mas=''):
return ('%s(%s inicio=%s, fin=%s, exito=%s, observaciones=%s%s)'
def __repr__(self, clave='', mas=''):
return ('%s(%s inicio=%s, fin=%s, exito=%s, observaciones=%s%s)'