X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/f2b85d2d244cef59772e27dfe0a26da577e29f63..c5e6579e46589c8af4175e16283337bc0ac75df6:/sercom/model.py diff --git a/sercom/model.py b/sercom/model.py index a9ef27b..6191710 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -17,6 +17,7 @@ __all__ = ('Curso', 'Usuario', 'Docente', 'Alumno', 'CasoDePrueba') #{{{ Custom Columns +# 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 @@ -74,7 +75,7 @@ class Curso(SQLObject): #{{{ for d in docentes: self.add_docente(d) for (n, e) in enumerate(ejercicios): - self.add_ejercicio(n, e) + self.add_ejercicio(n+1, e) for a in alumnos: self.add_alumno(a) @@ -338,9 +339,13 @@ class Comando(InheritableSQLObject): #{{{ 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=''): @@ -626,6 +631,11 @@ class Grupo(Entregador): #{{{ % (self.id, self.nombre, srepr(self.responsable), self.nota, self.nota_cursada, self.observaciones, self.activo) + @classmethod + def selectByAlumno(self, alumno): + return Miembro.select(AND(Miembro.q.alumnoID == AlumnoInscripto.q.id, + AlumnoInscripto.q.alumnoID == alumno.id)) + def shortrepr(self): return 'grupo:' + self.nombre #}}} @@ -648,6 +658,10 @@ class AlumnoInscripto(Entregador): #{{{ def _get_nombre(self): return self.alumno.padron + @classmethod + def selectByAlumno(self, alumno): + return AlumnoInscripto.select(AlumnoInscripto.q.alumnoID == alumno.id).getOne() + def __repr__(self): return 'AlumnoInscripto(id=%s, alumno=%s, condicional=%s, nota=%s, ' \ 'nota_cursada=%s, tutor=%s, observaciones=%s, activo=%s)' \ @@ -774,10 +788,12 @@ class Correccion(SQLObject): #{{{ 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)'