]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sercom/sqlo.py
Bugfix en Intento.getPruebas*Pasadas() que hacía que devuelva true si no compilaba.
[software/sercom-old.git] / src / sercom / sqlo.py
index 9673e00ddd64ba6b93bf2634235a4d6b80d5bdc3..47069f52ca6833abaadf20949e32fb10cfb31e3a 100644 (file)
@@ -35,18 +35,18 @@ class Curso(BaseSQLObject):
 
 class Inscripto(BaseSQLObject):
     # Clave
-    padron          = IntCol(alternateID = True)
+    padron          = IntCol(alternateID=True)
     # Campos
     curso           = ForeignKey('Curso')
     mail            = StringCol()
-    activo          = BoolCol(default = True)
+    activo          = BoolCol(default=True)
     # Joins
     intentos        = MultipleJoin('Intento')
     correcciones    = MultipleJoin('Correccion')
 
 class Docente(BaseSQLObject):
     # Clave
-    nombre          = StringCol(alternateID = True)
+    nombre          = StringCol(alternateID=True)
     # Campos
     mail            = StringCol()
     corrige         = BoolCol()
@@ -62,7 +62,7 @@ class Ejercicio(BaseSQLObject):
     numero          = Col()
     docente         = ForeignKey('Docente')
     # Joins
-    casosDePrueba   = MultipleJoin('CasoDePrueba', joinMethodName='casosDePrueba') # XXX hack
+    casosDePrueba   = MultipleJoin('CasoDePrueba')
     entregas        = MultipleJoin('Entrega')
     cursos          = RelatedJoin('Curso', intermediateTable = 'entrega')
 
@@ -96,10 +96,10 @@ class CasoDePrueba(BaseSQLObject):
     nombre          = StringCol()
     # Campos
     privado         = BoolCol()
-    activo          = BoolCol(default = True)
-    parametros      = StringCol(default = None)
-    codigoRetorno   = IntCol(default = False)
-    tiempoCpu       = FloatCol(default = None)
+    activo          = BoolCol(default=True)
+    parametros      = StringCol(default=None)
+    codigoRetorno   = IntCol(default=False)
+    tiempoCpu       = FloatCol(default=None)
     # Joins
     pruebas         = MultipleJoin('Prueba')
 
@@ -137,13 +137,13 @@ class Intento(BaseSQLObject):
     numero          = IntCol()
     # Campos
     llegada         = DateTimeCol()
-    inicioCompila   = DateTimeCol(default = None)
-    finCompila      = DateTimeCol(default = None)
-    inicioPruebas   = DateTimeCol(default = None)
-    finPruebas      = DateTimeCol(default = None)
-    compila         = BoolCol(default = None)
+    inicioCompila   = DateTimeCol(default=None)
+    finCompila      = DateTimeCol(default=None)
+    inicioPruebas   = DateTimeCol(default=None)
+    finPruebas      = DateTimeCol(default=None)
+    compila         = BoolCol(default=None)
     mailRespuesta   = StringCol()
-    observaciones   = StringCol(default = None)
+    observaciones   = StringCol(default=None)
     # Joins
     pruebas         = MultipleJoin('Prueba')
 
@@ -155,6 +155,14 @@ class Intento(BaseSQLObject):
         except IndexError:
             return None
 
+    @classmethod
+    def faltaCompilar(cls, entrega, connection=None):
+        no_compilados = cls.selectBy(entregaID=entrega.id, compila=None,
+            connection=connection).count()
+        no_probados = cls.selectBy(entregaID=entrega.id, compila=True,
+            finPruebas=None, connection=connection).count()
+        return no_compilados + no_probados
+
     def _get_path(self):
         curso = self.inscripto.curso
         entrega = self.entrega
@@ -167,18 +175,20 @@ class Intento(BaseSQLObject):
         return path.join(self.path, 'chroot')
 
     def _get_pruebasPasadas(self):
+        if not self.compila: return False
         for p in self.pruebas:
-            if not p.pasada:
-                return False
+            if not p.pasada: return False
         return True
 
     def _get_pruebasPublicasPasadas(self):
+        if not self.compila: return False
         for p in self.pruebas:
             if not p.pasada and not p.casoDePrueba.privado:
                 return False
         return True
 
     def _get_pruebasPrivadasPasadas(self):
+        if not self.compila: return False
         for p in self.pruebas:
             if not p.pasada and p.casoDePrueba.privado:
                 return False
@@ -186,13 +196,13 @@ class Intento(BaseSQLObject):
 
 class Correccion(BaseSQLObject):
     # Clave
-    entrega         = ForeignKey('Ejercicio')
+    entrega         = ForeignKey('Entrega')
     inscripto       = ForeignKey('Inscripto')
     # Campos
     intento         = ForeignKey('Intento')
     docente         = ForeignKey('Docente')
-    nota            = IntCol(default = None)
-    observaciones   = StringCol(default = None)
+    nota            = IntCol(default=None)
+    observaciones   = StringCol(default=None)
 
 class Prueba(BaseSQLObject):
     # Clave
@@ -200,9 +210,9 @@ class Prueba(BaseSQLObject):
     casoDePrueba    = ForeignKey('CasoDePrueba')
     # Campos
     inicio          = DateTimeCol()
-    fin             = DateTimeCol(default = None)
-    pasada          = BoolCol(default = None)
-    observaciones   = StringCol(default = None)
+    fin             = DateTimeCol(default=None)
+    pasada          = BoolCol(default=None)
+    observaciones   = StringCol(default=None)
 
     def _get_archivosSalida(self):
         ent = self.casoDePrueba.archivosEntrada