1 from sqlobject import *
2 from sqlobject.sqlbuilder import *
4 __all__ = ('Curso', 'Inscripto', 'Docente', 'Ejercicio', 'Entrega',
5 'CasoDePrueba', 'Intento', 'Correccion', 'Prueba')
7 class BaseSQLObject(SQLObject):
10 def by(cls, connection = None, **kw):
12 return cls.selectBy(connection = connection, **kw)[0]
14 raise SQLObjectNotFound, "The object %s with columns %s does not exist" % (cls.__name__, kw)
16 class Curso(BaseSQLObject):
24 docentes = RelatedJoin('Docente')
25 entregas = MultipleJoin('Entrega')
26 inscriptos = MultipleJoin('Inscripto')
27 ejercicios = RelatedJoin('Curso', intermediateTable = 'entrega')
29 class Inscripto(BaseSQLObject):
31 padron = Col(alternateID = True)
33 curso = ForeignKey('Curso')
35 activo = Col(default = 1)
37 intentos = MultipleJoin('Intento')
38 correcciones = MultipleJoin('Correccion')
40 class Docente(BaseSQLObject):
42 nombre = Col(alternateID = True)
47 cursos = RelatedJoin('Curso')
48 ejercicios = MultipleJoin('Ejercicio')
49 correcciones = MultipleJoin('Correccion')
51 class Ejercicio(BaseSQLObject):
56 docente = ForeignKey('Docente')
58 casosDePrueba = MultipleJoin('CasoDePrueba', joinMethodName='casosDePrueba') # XXX hack
59 entregas = MultipleJoin('Entrega')
60 cursos = RelatedJoin('Curso', intermediateTable = 'entrega')
62 class Entrega(BaseSQLObject):
64 curso = ForeignKey('Curso')
68 ejercicio = ForeignKey('Ejercicio')
72 cursos = MultipleJoin('Curso')
73 correcciones = MultipleJoin('Correccion')
74 intentos = MultipleJoin('Intento')
76 class CasoDePrueba(BaseSQLObject):
78 ejercicio = ForeignKey('Ejercicio')
82 activo = Col(default = 1)
83 parametros = Col(default = None)
84 codigoRetorno = Col(default = 0)
85 tiempoCpu = Col(default = None)
87 pruebas = MultipleJoin('Prueba')
89 class Intento(BaseSQLObject):
91 inscripto = ForeignKey('Inscripto')
92 entrega = ForeignKey('Entrega')
96 inicioCompila = Col(default = None)
97 finCompila = Col(default = None)
98 inicioPruebas = Col(default = None)
99 finPruebas = Col(default = None)
100 compila = Col(default = None)
101 notificado = Col(default = 0)
102 mailRespuesta = Col()
103 observaciones = Col(default = None)
105 pruebas = MultipleJoin('Prueba')
108 def getProximoAProbar(cls, connection=None):
110 return cls.select(None == cls.q.compila, limit=1,
111 orderBy=cls.q.llegada, connection=connection)[0]
115 def path(self, dir_base):
116 from os.path import join
117 curso = self.inscripto.curso
118 entrega = self.entrega
119 return join(dir_base, '%s.%s' % (curso.anio, curso.cuatrimestre),
120 '%s.%s.%s' % (curso.curso, entrega.nroEjercicio, entrega.entrega),
121 '%s.%s' % (self.inscripto.padron, self.numero))
123 class Correccion(BaseSQLObject):
125 entrega = ForeignKey('Ejercicio')
126 inscripto = ForeignKey('Inscripto')
128 intento = ForeignKey('Intento')
129 docente = ForeignKey('Docente')
130 nota = Col(default = None)
131 observaciones = Col(default = None)
133 class Prueba(BaseSQLObject):
135 intento = ForeignKey('Intento')
136 casoDePrueba = ForeignKey('CasoDePrueba')
139 fin = Col(default = None)
140 pasada = Col(default = None)
141 observaciones = Col(default = None)
143 # vim: set et sw=4 sts=4 :