config-tree-framework 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- config_tree/__init__.py +3 -0
- config_tree/node.py +10 -0
- config_tree/tree_ops.py +41 -0
- config_tree/yaml_loader.py +32 -0
- config_tree_framework-0.1.1.dist-info/METADATA +6 -0
- config_tree_framework-0.1.1.dist-info/RECORD +8 -0
- config_tree_framework-0.1.1.dist-info/WHEEL +5 -0
- config_tree_framework-0.1.1.dist-info/top_level.txt +1 -0
config_tree/__init__.py
ADDED
config_tree/node.py
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class Node:
|
|
2
|
+
def __init__(self, value, max_children=None):
|
|
3
|
+
self.value = value
|
|
4
|
+
self.children = []
|
|
5
|
+
self.max_children = max_children
|
|
6
|
+
|
|
7
|
+
def add_child(self, node):
|
|
8
|
+
if self.max_children is not None and len(self.children) >= self.max_children:
|
|
9
|
+
raise ValueError("Maximum children limit reached")
|
|
10
|
+
self.children.append(node)
|
config_tree/tree_ops.py
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from .node import Node
|
|
2
|
+
|
|
3
|
+
def create_tree(value, max_children=None):
|
|
4
|
+
return Node(value, max_children)
|
|
5
|
+
|
|
6
|
+
def add_node(root, parent_value, new_value):
|
|
7
|
+
if root.value == parent_value:
|
|
8
|
+
root.add_child(Node(new_value, root.max_children))
|
|
9
|
+
return True
|
|
10
|
+
for child in root.children:
|
|
11
|
+
if add_node(child, parent_value, new_value):
|
|
12
|
+
return True
|
|
13
|
+
return False
|
|
14
|
+
|
|
15
|
+
def edit_node(root, old_value, new_value):
|
|
16
|
+
if root.value == old_value:
|
|
17
|
+
root.value = new_value
|
|
18
|
+
return True
|
|
19
|
+
for child in root.children:
|
|
20
|
+
if edit_node(child, old_value, new_value):
|
|
21
|
+
return True
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
def delete_node(root, value):
|
|
25
|
+
for i, child in enumerate(root.children):
|
|
26
|
+
if child.value == value:
|
|
27
|
+
del root.children[i]
|
|
28
|
+
return True
|
|
29
|
+
for child in root.children:
|
|
30
|
+
if delete_node(child, value):
|
|
31
|
+
return True
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
def delete_tree(root):
|
|
35
|
+
root.children.clear()
|
|
36
|
+
root.value = None
|
|
37
|
+
|
|
38
|
+
def print_tree(root, level=0):
|
|
39
|
+
print(" " * level + str(root.value))
|
|
40
|
+
for child in root.children:
|
|
41
|
+
print_tree(child, level + 1)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import yaml
|
|
2
|
+
from .node import Node
|
|
3
|
+
|
|
4
|
+
def load_tree_from_yaml(path):
|
|
5
|
+
with open(path, "r") as f:
|
|
6
|
+
config = yaml.safe_load(f)
|
|
7
|
+
|
|
8
|
+
max_children = config.get("tree", {}).get("max_children")
|
|
9
|
+
return _build_tree(config["root"], max_children)
|
|
10
|
+
|
|
11
|
+
def _build_tree(data, max_children):
|
|
12
|
+
node = Node(data["value"], max_children)
|
|
13
|
+
for child in data.get("children", []):
|
|
14
|
+
node.add_child(_build_tree(child, max_children))
|
|
15
|
+
return node
|
|
16
|
+
|
|
17
|
+
def save_tree_to_yaml(root, path):
|
|
18
|
+
tree_dict = {
|
|
19
|
+
"tree": {
|
|
20
|
+
"max_children": root.max_children
|
|
21
|
+
},
|
|
22
|
+
"root": _serialize_tree(root)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
with open(path, "w") as f:
|
|
26
|
+
yaml.safe_dump(tree_dict, f, sort_keys=False)
|
|
27
|
+
|
|
28
|
+
def _serialize_tree(node):
|
|
29
|
+
data = {"value": node.value}
|
|
30
|
+
if node.children:
|
|
31
|
+
data["children"] = [_serialize_tree(child) for child in node.children]
|
|
32
|
+
return data
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
config_tree/__init__.py,sha256=TwW_v3Hj6IL_Z268yqZnECXzWooaSnqjgv-8g1-tiKs,138
|
|
2
|
+
config_tree/node.py,sha256=lYBiILi6a-G-LHHjB0JlIlGQtKD1EHX5TJA6ulkLAnI,383
|
|
3
|
+
config_tree/tree_ops.py,sha256=MHvO5xouc2URRX_AKimbitW4tyFBaOE-jwtGtJpZQ2U,1179
|
|
4
|
+
config_tree/yaml_loader.py,sha256=VoGb2BDUHzJPOAIQJNgeP5M24gBILs_TanjG0xvX2fs,917
|
|
5
|
+
config_tree_framework-0.1.1.dist-info/METADATA,sha256=h5kOJJDySnO2jHoa89tjvFKO91HWKiVMP9EUm_G-_yY,201
|
|
6
|
+
config_tree_framework-0.1.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
7
|
+
config_tree_framework-0.1.1.dist-info/top_level.txt,sha256=y274XocibJLoL3Qqr0CMKJdztGtnprMYBHwSZvRBoUg,12
|
|
8
|
+
config_tree_framework-0.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
config_tree
|