+ def __init__(self, nombre=None, autor=None, descripcion=None, tareas=(),
+ **kargs):
+ SQLObject.__init__(self, nombre=nombre, autorID=autor and autor.id,
+ descripcion=descripcion, **kargs)
+ if tareas:
+ self.tareas = tareas
+
+ def add_caso_de_prueba(self, nombre, *args, **kargs):
+ return CasoDePrueba(self, nombre, *args, **kargs)
+
+ 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,
+ Enunciado.q.id == self.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,
+ ))))