Browse Source

TreeLib: Další none-checky

Zbývají rotace
export_seznamu_prednasek
Pavel 'LEdoian' Turinsky 4 years ago
parent
commit
3d0adc6c9e
  1. 24
      seminar/treelib.py

24
seminar/treelib.py

@ -218,9 +218,18 @@ def get_prev_node_of_type(node, type):
# Exception, kterou některé metody při špatném použití mohou házet
# Hlavní důvod je možnost informovat o selhání, aby se příslušný problém dal zobrazit na frontendu,
class TreeLibError(RuntimeError):
pass
# Editace stromu: # Editace stromu:
def create_node_after(predecessor, type, **kwargs): def create_node_after(predecessor, type, **kwargs):
if predecessor is None:
raise TreeLibError("Nelze vyrábět sirotky! (predecessor=None)")
if not isinstance(type, TreeNode):
raise TreeLibError("Nový node není node!")
new_node = type.objects.create(**kwargs) new_node = type.objects.create(**kwargs)
new_node.root = predecessor.root new_node.root = predecessor.root
new_node.save() new_node.save()
@ -233,6 +242,10 @@ def create_node_after(predecessor, type, **kwargs):
# Vyrábí prvního syna, ostatní nalepí za (existují-li) # Vyrábí prvního syna, ostatní nalepí za (existují-li)
def create_child(parent, type, **kwargs): def create_child(parent, type, **kwargs):
if parent is None:
raise TreeLibError("Nelze vyrábět sirotky! (parent=None)")
if not isinstance(type, TreeNode):
raise TreeLibError("Nový node není node!")
new_node = type.objects.create(**kwargs) new_node = type.objects.create(**kwargs)
new_node.root = parent.root new_node.root = parent.root
new_node.save() new_node.save()
@ -246,6 +259,8 @@ def create_child(parent, type, **kwargs):
return new_node return new_node
def insert_last_child(parent, node): def insert_last_child(parent, node):
if parent is None:
raise TreeLibError("Nelze vyrábět sirotky! (parent=None)")
""" Zadaný Node přidá jako posledního potomka otce. """ """ Zadaný Node přidá jako posledního potomka otce. """
last = get_last_child(parent) last = get_last_child(parent)
if not is_orphan(node): if not is_orphan(node):
@ -264,6 +279,10 @@ def insert_last_child(parent, node):
last.save() last.save()
def create_node_before(successor, type, **kwargs): def create_node_before(successor, type, **kwargs):
if successor is None:
raise TreeLibError("Nelze vyrábět sirotky! (successor=None)")
if not isinstance(type, TreeNode):
raise TreeLibError("Nový node není node!")
if safe_pred(successor) is not None: if safe_pred(successor) is not None:
# Easy: přidáme za předchůdce # Easy: přidáme za předchůdce
create_node_after(successor.prev, type, **kwargs) create_node_after(successor.prev, type, **kwargs)
@ -284,11 +303,6 @@ def create_node_before(successor, type, **kwargs):
def swap(node, other): def swap(node, other):
raise NotImplementedError("YAGNI (You aren't gonna need it).") raise NotImplementedError("YAGNI (You aren't gonna need it).")
# Exception, kterou některé metody při špatném použití mohou házet
# Hlavní důvod je možnost informovat o selhání, aby se příslušný problém dal zobrazit na frontendu,
class TreeLibError(RuntimeError):
pass
@transaction.atomic @transaction.atomic
def swap_succ(node): def swap_succ(node):

Loading…
Cancel
Save