- casos_de_prueba = RelatedJoin('CasoDePrueba') # TODO CasoInstancia -> private
-
- def __init__(self, ejercicio=None, numero=None, inicio=None, fin=None,
- observaciones=None, activo=True, tareas=(), **kargs):
- if ejercicio:
- SQLObject.__init__(self, ejercicioID=ejercicio.id, numero=numero,
- fin=fin, inicio=inicio, observaciones=observaciones, activo=activo,
- **kargs)
- if tareas:
- self.tareas = tareas
-
- def _get_tareas(self):
- self.__tareas = tuple(Tarea.select(
- AND(
- Tarea.q.id == instancia_tarea_t.tarea_id,
- InstanciaDeEntrega.q.id == instancia_tarea_t.instancia_id,
- InstanciaDeEntrega.q.id == self.id,
- ),
- clauseTables=(instancia_tarea_t, InstanciaDeEntrega.sqlmeta.table),
- orderBy=instancia_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(instancia_tarea_t, where=AND(
- instancia_tarea_t.instancia_id == self.id,
- instancia_tarea_t.tarea_id == tid))))
- for tid in new - old: # creadas
- self._connection.query(str(Insert(instancia_tarea_t, values=dict(
- instancia_id=self.id, tarea_id=tid, orden=orden[tid]
- ))))
- for tid in new & old: # actualizados
- self._connection.query(str(Update(instancia_tarea_t,
- values=dict(orden=orden[tid]), where=AND(
- instancia_tarea_t.instancia_id == self.id,
- instancia_tarea_t.tarea_id == tid,
- ))))