From 67f5f5bb7f6e4ac83aa6796ccb5af6cd45c0bba9 Mon Sep 17 00:00:00 2001 From: Andrei Bondarenko Date: Fri, 16 Jul 2021 18:18:51 +0200 Subject: [PATCH] Added element listing --- core/bottom.py | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/core/bottom.py b/core/bottom.py index 2d68216..31ccc66 100644 --- a/core/bottom.py +++ b/core/bottom.py @@ -1,4 +1,4 @@ -from state.base import State +from state.base import INTEGER, FLOAT, BOOLEAN, STRING, TYPE, State from core.element import Element, String @@ -60,18 +60,45 @@ class Bottom: self.state.delete_edge(element) print(f"Warning: Invalid name {name.value}, element not created.") - def get_element(self, model: Element, name: String) -> Element: - model_root = self.state.read_dict(model.id, "Model") - element = self.state.read_dict(model_root, name.value) - if element is None: - print(f"Warning: Unknown element {name.value}.") - return Element() - else: - return Element(id=element, value=self.state.read_value(element)) - def delete_element(self, model: Element, name: String): model_root = self.state.read_dict(model.id, "Model") element = self.state.read_dict(model_root, name.value) # could be both a node or an edge self.state.delete_node(element) self.state.delete_edge(element) + + def list_elements(self, model: Element): + def is_edge(elem: Element) -> bool: + edge = self.state.read_edge(elem.id) + return edge is not None + def value_type(value) -> str: + map = { + int: INTEGER, + float: FLOAT, + str: STRING, + bool: BOOLEAN, + tuple: TYPE + } + return map[type(value)][0] + + unsorted = [] + model_root = self.state.read_dict(model.id, "Model") + for elem_edge in self.state.read_outgoing(model_root): + # get element name + label_edge, = self.state.read_outgoing(elem_edge) + _, label_node = self.state.read_edge(label_edge) + label = self.state.read_value(label_node) + # find element bottom type + _, elem = self.state.read_edge(elem_edge) + if is_edge(elem): + bottom_type = "Edge" + else: + # is_node + elem_value = self.state.read_value(elem) + if elem_value is None: + bottom_type = "Node" + else: + bottom_type = value_type + unsorted.append(f"{label} : {bottom_type}") + for i in sorted(unsorted): + print(i)