20 """Iteratively builds tree via dictionary. This should be generated in SelectionInterface"""
23 if self.
_tree is not None:
26 self.
_tree = Tree(
"Configuration:")
27 main_screen = self.app.get_screen(
"main")
28 self.
_controller = main_screen.query_one(
"ConfigurationController")
31 for key, interface
in self.
_controller.get_interface().items():
35 if self.id
not in self.
_controller.get_interface().keys():
36 raise ValueError(f
"Cannot find {self._interface_label} in controller. \n \
37 available interfaces are {self._controller.get_interface()}")
40 tree_root = self.
_tree.root
44 for key, branch
in sorted(self.
_controller.get_interface()[self.id].relationships.items()):
45 tree_node = tree_root.add(f
"[green]{key}[/green]", expand=
False)
49 self.
__build_tree_node(tree_node, branch, is_disabled=
False, disabled_elements=[])
52 def __build_tree_node(self, input_node: TreeNode, input_list: list, is_disabled: bool=
False, disabled_elements: list=[]):
53 """Recursively build tree nodes from a list of dictionaries"""
56 if len(input_list)==0:
60 for config_item
in input_list:
62 if isinstance(config_item, dict):
64 config_key = list(config_item.keys())[0]
65 config_objects = list(config_item.values())[0]
68 if isinstance(config_key, str):
69 item_disabled = is_disabled
74 if config_key.className() ==
"Session":
75 disabled_elements = config_key.disabled
81 dal_str = self.
_controller.generate_rich_string(config_key, item_disabled)
82 stored_data = config_key
86 tree_node = input_node.add(dal_str, data=stored_data)
90 self.
__build_tree_node(tree_node, config_objects, item_disabled, disabled_elements)
95 input_node.add_leaf(self.
_controller.generate_rich_string(config_item, item_disabled), data=config_item)