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)
17 class Curso(BaseSQLObject):
25 docentes = RelatedJoin('Docente')
26 entregas = MultipleJoin('Entrega')
27 inscriptos = MultipleJoin('Inscripto')
28 ejercicios = RelatedJoin('Curso', intermediateTable = 'entrega')
30 class Inscripto(BaseSQLObject):
32 padron = Col(alternateID = True)
34 curso = ForeignKey('Curso')
36 activo = Col(default = 1)
38 intentos = MultipleJoin('Intento')
39 correcciones = MultipleJoin('Correccion')
41 class Docente(BaseSQLObject):
43 nombre = Col(alternateID = True)
48 cursos = RelatedJoin('Curso')
49 ejercicios = MultipleJoin('Ejercicio')
50 correcciones = MultipleJoin('Correccion')
52 class Ejercicio(BaseSQLObject):
57 docente = ForeignKey('Docente')
59 casosDePrueba = MultipleJoin('CasoDePrueba')
60 entregas = MultipleJoin('Entrega')
61 cursos = RelatedJoin('Curso', intermediateTable = 'entrega')
63 class Entrega(BaseSQLObject):
65 curso = ForeignKey('Curso')
69 ejercicio = ForeignKey('Ejercicio')
73 cursos = MultipleJoin('Curso')
74 correcciones = MultipleJoin('Correccion')
75 intentos = MultipleJoin('Intento')
77 class CasoDePrueba(BaseSQLObject):
79 ejercicio = ForeignKey('Ejercicio')
83 activo = Col(default = 1)
84 parametros = Col(default = None)
85 codigoRetorno = Col(default = 0)
86 tiempoCpu = Col(default = None)
88 pruebas = MultipleJoin('Prueba')
90 class Intento(BaseSQLObject):
92 inscripto = ForeignKey('Inscripto')
93 entrega = ForeignKey('Entrega')
97 inicioCompila = Col(default = None)
98 finCompila = Col(default = None)
99 inicioPruebas = Col(default = None)
100 finPruebas = Col(default = None)
101 compila = Col(default = None)
102 notificado = Col(default = 0)
103 mailRespuesta = Col()
104 observaciones = Col(default = None)
106 pruebas = MultipleJoin('Prueba')
108 _dir_base = 'intentos'
111 def getProximoAProbar(cls, connection = None):
113 return cls.select(cls.q.inicioPruebas == None, limit=1,
114 orderBy=cls.q.llegada, connection=connection)[0]
117 getProximoAProbar = classmethod(getProximoAProbar)
119 def path(self, dir_base):
121 curso = self.inscripto.curso
122 entrega = self.entrega
123 return os.path.join(dir_base, curso.anio, curso.cuatrimestre,
124 curso.curso, '%s.%s' % (entrega.nroEjercicio, entrega.entrega),
125 self.inscripto.padron, self.numero)
127 class Correccion(BaseSQLObject):
129 entrega = ForeignKey('Ejercicio')
130 inscripto = ForeignKey('Inscripto')
132 intento = ForeignKey('Intento')
133 docente = ForeignKey('Docente')
134 nota = Col(default = None)
135 observaciones = Col(default = None)
137 class Prueba(BaseSQLObject):
139 intento = ForeignKey('Intento')
140 casoDePrueba = ForeignKey('CasoDePrueba')
143 fin = Col(default = None)
144 pasada = Col(default = None)
145 observaciones = Col(default = None)
147 # vim: set et sw=4 sts=4 :