nombre = UnicodeCol(length=30, alternateID=True)
# Campos
descripcion = UnicodeCol(length=255, default=None)
- terminar_si_falla = BoolCol(notNone=True, default=True)
- rechazar_si_falla = BoolCol(notNone=True, default=True)
# Joins
enunciados = RelatedJoin('Enunciado', addRemoveName='_enunciado')
archivos_entrada = BLOBCol(default=None) # ZIP con archivos de entrada
# __stdin__ es caso especial
# Si un caso de prueba tiene
- # comandos con stdin y el caso
- # de prueba también tiene stdin
- # se usa el stdin del comando.
+ # comandos que tiene algún
+ # archivo de entrada (incluyendo
+ # stdin) con los propios, se usa
+ # el archivo del caso de prueba,
+ # no del comando.
archivos_a_comparar = BLOBCol(default=None) # ZIP con archivos de salida
# __stdout__, __stderr__ y
# __stdouterr__ (ambos juntos)
# son casos especiales
- archivos_a_guardar = TupleCol(notNone=True, default=()) # TODO SetCol
+ # Si un caso de prueba tiene
+ # comandos que tiene algún
+ # archivo a comparar (incluyendo
+ # stdout/err) con los propios,
+ # se compara contra el archivo
+ # del caso de prueba, no del
+ # comando.
+ archivos_a_guardar = TupleCol(notNone=True, default=()) # TODO FrozenSetCol
# __stdout__, __stderr__ y
# __stdouterr__ (ambos juntos)
# son casos especiales
class ComandoPrueba(Comando): #{{{
_inheritable = False
- RET_PRUEBA = -2 # Espera el mismo retorno que el de la prueba.
+ RET_PRUEBA = -257 # Espera el mismo retorno que el de la prueba.
# XXX todos los campos de limitación en este caso son multiplicadores para
# los valores del caso de prueba.
# Clave
pk = DatabaseIndex(tarea, orden, unique=True)
def __repr__(self):
- return super(ComandoFuente, self).__repr__('tarea=%s, orden=%s'
+ return super(ComandoPrueba, self).__repr__('tarea=%s, orden=%s'
% (self.tarea.shortrepr(), self.orden))
def shortrepr(self):
pruebas = MultipleJoin('Prueba')
def __repr__(self):
- return super(ComandoFuente, self).__repr__('enunciado=%s, nombre=%s'
+ return super(CasoDePrueba, self).__repr__('enunciado=%s, nombre=%s'
% (srepr(self.enunciado), self.nombre))
def shortrepr(self):
@classmethod
def selectByAlumno(self, alumno):
return Miembro.select(AND(Miembro.q.alumnoID == AlumnoInscripto.q.id,
- AlumnoInscripto.q.alumnoID == alumno.id))
+ AlumnoInscripto.q.alumnoID == alumno.id, Miembro.q.baja == None))
def shortrepr(self):
return 'grupo:' + self.nombre
membresias = MultipleJoin('Miembro', joinColumn='alumno_id')
entregas = MultipleJoin('Entrega', joinColumn='alumno_id')
correcciones = MultipleJoin('Correccion', joinColumn='alumno_id')
+ # Notas de la cursada
+ nota_practica = DecimalCol(size=3, precision=1, default=None)
+ nota_final = DecimalCol(size=3, precision=1, default=None)
+ nota_libreta = DecimalCol(size=3, precision=1, default=None)
def _get_nombre(self):
return self.alumno.padron
class Ejecucion(InheritableSQLObject): #{{{
# Campos
- inicio = DateTimeCol(notNone=True, default=DateTimeCol.now)
+ inicio = DateTimeCol(default=None)
fin = DateTimeCol(default=None)
exito = IntCol(default=None)
observaciones = UnicodeCol(notNone=True, default=u'')
diferencias = BLOBCol(default=None) # ZIP con archivos guardados
def __repr__(self, clave='', mas=''):
- return super(ComandoFuenteEjecutado, self).__repr__(clave, mas)
+ return super(ComandoEjecutado, self).__repr__(clave, mas)
#}}}
class ComandoFuenteEjecutado(ComandoEjecutado): #{{{
self.entrega.shortrepr()))
def shortrepr(self):
- return '%s-%s' % (self.tarea.shortrepr(), self.entrega.shortrepr())
+ return '%s-%s' % (self.comando.shortrepr(), self.entrega.shortrepr())
#}}}
class ComandoPruebaEjecutado(ComandoEjecutado): #{{{