def register_node(self, name: str, node_type: Node_type, node_type_id=0, root="") -> Node: """ add a node with a node_type *args: node_type: Node_type """ def register_root(node: Node, root=""): if root is None: pass #print(f"node: {node.name}, doesn't have root") elif root in node.roots: pass #print(f"root {root} allready exists in node") # #PROVISIIIIOOONALLLLLL!!!!! # node.roots.append(root) # node.save() else: node.roots.append(root) node.save() return root #IF Node_type is not specify: DO nothing if node_type == None and node_type_id == 0: print("specify the node_type") return elif node_type_id == 0: pass elif node_type == None: node_type = Node_type.objects(id=node_type_id).first() node = Node.objects(name=name).first() if node != None: print(f"node {node.name}, all ready exists") root = register_root(node=node, root=root) return node else: pass node = Node() node.name = name node.node_type_id = node_type.id root = register_root(node=node, root=root) node.save() node_type.nodes.append(node.id) node_type.save() return node
def get_nodes_with_roots(self, node_type: Node_type, root1: Space, root2: Space): """ this method will return the allowed nodes, due to the rule that the nodes have to be more than one root *args: node_type: Node_type root1: Space.id root2: Space.id return: list(node_id): list(int) """ print("entry to roots") nodes = Node.objects().all() \ .filter(node_type_id=node_type.id)\ .filter(roots__1__exists =True)\ .filter(roots = root2.id)\ .filter(roots = root1.id) print("it works!!!!!!!!! to find the root") #.filter(roots__1__exists =True)\ return list(nodes)
def get_node(self, node_id: str) -> Node: node = Node.objects(id=node_id).first() return node