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.
@@ -0,0 +1,3 @@
1
+ from .node import Node
2
+ from .tree_ops import create_tree, add_node, edit_node, print_tree
3
+ from .yaml_loader import load_tree_from_yaml
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)
@@ -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,6 @@
1
+ Metadata-Version: 2.4
2
+ Name: config-tree-framework
3
+ Version: 0.1.1
4
+ Summary: Config-driven extensible tree framework for educational and algorithmic use
5
+ Requires-Python: >=3.8
6
+ Requires-Dist: pyyaml
@@ -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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ config_tree