def faseGraphConstructor(self, idfase): #lista de items para el grafo items = DBSession.query(Item).filter(Item.fase==idfase).all() itemsId = [] """ Todos los items de la fase forman parte del grafo (item = nodo) "grafo" es un grafo dirigido que representa las relaciones padre-hijo en una fase. """ grafo = digraph() for item in items: grafo.add_nodes([item.id_item]) """ Se busca en la tabla RelacionItem todas las relaciones de padre-hijo que contengan a los items de la fase """ #guardar los ids de los items for item in items: itemsId = itemsId + [item.id_item] relaciones = DBSession.query(RelacionItem).\ filter(RelacionItem.relacion_parentesco==1).\ filter(RelacionItem.id_item_actual.in_(itemsId)).\ filter(RelacionItem.id_item_relacionado.in_(itemsId)).\ all() #Se añaden las aristas entre los items relacionados for relacion in relaciones: grafo.add_edge((relacion.id_item_actual, relacion.id_item_relacionado)) return grafo
def proyectGraphConstructor(self, idproyecto): fases = DBSession.query(Fase).filter(Fase.proyecto==idproyecto).all() grafo = digraph() items = [] itemsId = [] #se "obtienen los items de cada fase for fase in fases: items = items + list(DBSession.query(Item).filter(Item.fase==fase.id_fase)) for item in items: grafo.add_nodes([item.id_item]) #guardar los ids de los items for item in items: itemsId = itemsId + [item.id_item] """ Se busca en la tabla RelacionItem todas las relaciones que contengan a los items del proyecto """ relaciones = DBSession.query(RelacionItem).\ filter((RelacionItem.id_item_actual).in_(itemsId)).\ all() #Se añaden las aristas entre los items relacionados for relacion in relaciones: grafo.add_edge((relacion.id_item_actual,relacion.id_item_relacionado)) return grafo