diff --git a/.gitignore b/.gitignore index 16613b5..af7d2a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ +# Created by venv; see https://docs.python.org/3/library/venv.html +* venv -__pycache__ -*.pyc \ No newline at end of file diff --git a/nodes/manager.py b/nodes/manager.py index b3c1178..5474e75 100644 --- a/nodes/manager.py +++ b/nodes/manager.py @@ -1,5 +1,40 @@ -# Create here the NodeManager Class +from .node import Node +from typing import List class NodeManager: - pass + nodes: List[Node] + + def __init__(self, nodes: List[Node]): + if not isinstance(nodes, list): + raise ValueError("Must pass a list of nodes.") + + self.nodes = nodes.copy() + + + def __getitem__(self, index) -> Node: + return self.nodes[index] + + + def __len__(self) -> int: + return len(self.nodes) + + + def remove(self, node: Node) -> None: + index = self.nodes.index(node) + self.nodes.pop(index) + + + def remove_cascade(self, node: Node) -> None: + index = self.nodes.index(node) + stack = [] + stack.append(self.nodes.pop(index)) + while stack: + node = stack.pop() + to_remove = [] + for item in self.nodes: + if item.parent == node.id: + stack.append(item) + to_remove.append(item) + for item in to_remove: + self.nodes.remove(item) \ No newline at end of file diff --git a/nodes/node.py b/nodes/node.py index 644ab4e..b9a84ef 100644 --- a/nodes/node.py +++ b/nodes/node.py @@ -2,4 +2,21 @@ class Node: - pass + id: int + parent: int + def __init__(self, id: int, parent: int): + if not isinstance(id, int): + raise ValueError("id must be a integer.") + + if not isinstance(parent, int): + raise ValueError("parent must be a integer.") + + if parent >= id: + raise ValueError("A Node parent cannot be greater or equal to it's id.") + + self.id = id + self.parent = parent + + + def __repr__(self): + return f"Node({self.id}, {self.parent})"