Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Created by venv; see https://docs.python.org/3/library/venv.html
*
venv
__pycache__
*.pyc
39 changes: 37 additions & 2 deletions nodes/manager.py
Original file line number Diff line number Diff line change
@@ -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)
19 changes: 18 additions & 1 deletion nodes/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -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})"