]> git.llucax.com Git - z.facultad/75.52/sercom.git/commitdiff
Agrega nueva relación ordenada entre Enunciado y Tarea.
authorLeandro Lucarella <llucax@gmail.com>
Sat, 27 Jan 2007 05:34:38 +0000 (05:34 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 27 Jan 2007 05:34:38 +0000 (05:34 +0000)
Se agrega una relación entre Enunciado y Tarea igual que la relación entre
InstanciaDeEntrega y Tarea. La idea es usar como template estas tareas a la hora
de agregar una nueva InstanciaDeEntrega.

doc/schema/schema.sql [moved from doc/schema.sql with 96% similarity]
doc/testdata.py
sercom/model.py

similarity index 96%
rename from doc/schema.sql
rename to doc/schema/schema.sql
index a4e8da42d2d20609bc103964c1c115517690dee6..6e8fefcc7d12ac6e835ecf690c01311ca444b986 100644 (file)
@@ -53,6 +53,13 @@ CREATE TABLE enunciado (
     creado TIMESTAMP NOT NULL
 );
 
+CREATE TABLE enunciado_tarea (
+    enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
+    tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
+    orden INT,
+    PRIMARY KEY (enunciado_id, tarea_id)
+);
+
 CREATE TABLE caso_de_prueba (
     id INTEGER PRIMARY KEY,
     enunciado_id INT CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
index 39477e5914607262c7e79c622f56da334dd66f8d..72027bd516cdcf8325ab2833fc471cb97e16192f 100644 (file)
@@ -22,6 +22,8 @@ t4.dependencias = (t3, t2)
 e1 = Enunciado(nombre=u'Un enunciado', autor=d, descripcion=u'Ejercicio reeee jodido')
 e2 = Enunciado(nombre=u'Otro enunciado', autor=d, descripcion=u'Ejercicio facilongo')
 e3 = Enunciado(nombre=u'Más enunciados', descripcion=u'Ejercicio anónimo')
+e1.tareas = (t4,)
+e2.tareas = (t2, t4)
 
 cp1 = e1.add_caso_de_prueba(u'Sin parámetros', retorno=0, descripcion=u'Un caso')
 cp2 = e1.add_caso_de_prueba(u'2 parámetross', retorno=0, parametros=('--test', '-c'))
@@ -31,6 +33,7 @@ ej2 = c.add_ejercicio(2, e2)
 
 ide = ej1.add_instancia(1, datetime(2007, 1, 25), datetime(2007, 1, 31, 20),
     observaciones='Entrega fea', activo=False)
+ide.tareas = (t2, t4)
 
 di = c.add_docente(d, corrige=True, observaciones=u'Tipo Pulenta')
 
index c775d24737416ff0e9e92acdbb8a2c4b7ccbbc4b..38fb9242feb1dd88490dd349c34dfa2df5d5eb6a 100644 (file)
@@ -61,6 +61,8 @@ SQLExpression.__hash__ = lambda self: hash(str(self))
 
 instancia_tarea_t = table.instancia_tarea
 
+enunciado_tarea_t = table.enunciado_tarea
+
 dependencia_t = table.dependencia
 
 #}}}
@@ -278,6 +280,39 @@ class Enunciado(SQLObject, ByObject): #{{{
     def add_caso_de_prueba(self, nombre, **opts):
         return CasoDePrueba(enunciadoID=self.id, nombre=nombre, **opts)
 
+    def _get_tareas(self):
+        self.__tareas = tuple(Tarea.select(
+            AND(
+                Tarea.q.id == enunciado_tarea_t.tarea_id,
+                Enunciado.q.id == enunciado_tarea_t.enunciado_id
+            ),
+            clauseTables=(enunciado_tarea_t, Enunciado.sqlmeta.table),
+            orderBy=enunciado_tarea_t.orden,
+        ))
+        return self.__tareas
+
+    def _set_tareas(self, tareas):
+        orden = {}
+        for i, t in enumerate(tareas):
+            orden[t.id] = i
+        new = frozenset([t.id for t in tareas])
+        old = frozenset([t.id for t in self.tareas])
+        tareas = dict([(t.id, t) for t in tareas])
+        for tid in old - new: # eliminadas
+            self._connection.query(str(Delete(enunciado_tarea_t, where=AND(
+                enunciado_tarea_t.enunciado_id == self.id,
+                enunciado_tarea_t.tarea_id == tid))))
+        for tid in new - old: # creadas
+            self._connection.query(str(Insert(enunciado_tarea_t, values=dict(
+                enunciado_id=self.id, tarea_id=tid, orden=orden[tid]
+            ))))
+        for tid in new & old: # actualizados
+            self._connection.query(str(Update(enunciado_tarea_t,
+                values=dict(orden=orden[tid]), where=AND(
+                    enunciado_tarea_t.enunciado_id == self.id,
+                    enunciado_tarea_t.tarea_id == tid,
+                ))))
+
     def __repr__(self):
         return 'Enunciado(id=%s, autor=%s, nombre=%s, descripcion=%s, ' \
             'creado=%s)' \