X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/blobdiff_plain/141102b1edb8db866a745e6bd82250f552dd789a..239d5c6787468d3f2733725022013c60a9d920ec:/sercom/model.py?ds=sidebyside diff --git a/sercom/model.py b/sercom/model.py index c775d24..38fb924 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -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)' \