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
39 changes: 38 additions & 1 deletion nodes/manager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
# Create here the NodeManager Class

from nodes.node import Node
from copy import deepcopy
from typing import List

class NodeManager:
nodes: List[Node]

def __init__(self, nodes: List[Node]):
if not isinstance(nodes, list) or not all(isinstance(n, Node) for n in nodes):
raise ValueError("nodes deve ser uma lista de Node")
self.nodes = deepcopy(nodes)

def __getitem__(self, index: int) -> Node:
return self.nodes[index]

def __len__(self) -> int:
return len(self.nodes)

def remove (self, node: Node):
if node not in self.nodes:
raise ValueError("Node não encontrado")
self.nodes.remove(node)
return None

def remove_cascade(self, node: Node):
if not isinstance(node, Node):
raise ValueError("node deve ser uma instância de Node")
if node not in self.nodes:
raise ValueError("Node não encontrado")
to_remove = {node.id}
removed_any = True
while removed_any:
removed_any = False
for n in self.nodes:
if n.parent in to_remove and n.id not in to_remove:
to_remove.add(n.id)
removed_any = True
self.nodes = [n for n in self.nodes if n.id not in to_remove]
return None

pass
25 changes: 24 additions & 1 deletion nodes/node.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Create here the Node Class

from typing import List, Optional

class Node:
id: int
parent: int

def __init__ (self, id:int, parent: int):
if not isinstance(id, int) or (parent is not None and not isinstance(parent, int)):
raise ValueError("Os ids devem ser inteiros")
if parent > id:
raise ValueError("O id do pai deve ser menor que o id do Node")
if parent == id:
raise ValueError("O id do pai não pode ser igual ao id do Node")
self.id = id
self.parent = parent

def __repr__(self):
return f"Node({self.id}, {self.parent})"

def __eq__(self, other):
if isinstance(other, Node):
return self.id == other.id and self.parent == other.parent
return False

def __hash__(self):
return hash((self.id, self.parent))
pass