diff --git a/seminar/treelib.py b/seminar/treelib.py index 06a710cf..6efab260 100644 --- a/seminar/treelib.py +++ b/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: 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):