|
|
@ -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: |
|
|
|
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.root = predecessor.root |
|
|
|
new_node.save() |
|
|
@ -233,6 +242,10 @@ def create_node_after(predecessor, type, **kwargs): |
|
|
|
|
|
|
|
# Vyrábí prvního syna, ostatní nalepí za (existují-li) |
|
|
|
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.root = parent.root |
|
|
|
new_node.save() |
|
|
@ -246,6 +259,8 @@ def create_child(parent, type, **kwargs): |
|
|
|
return new_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. """ |
|
|
|
last = get_last_child(parent) |
|
|
|
if not is_orphan(node): |
|
|
@ -264,6 +279,10 @@ def insert_last_child(parent, node): |
|
|
|
last.save() |
|
|
|
|
|
|
|
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: |
|
|
|
# Easy: přidáme za předchůdce |
|
|
|
create_node_after(successor.prev, type, **kwargs) |
|
|
@ -284,11 +303,6 @@ def create_node_before(successor, type, **kwargs): |
|
|
|
def swap(node, other): |
|
|
|
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 |
|
|
|
def swap_succ(node): |
|
|
|