Added element listing

This commit is contained in:
Andrei Bondarenko 2021-07-16 18:18:51 +02:00
parent b404f3450f
commit 67f5f5bb7f

View file

@ -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)