MCPcopy Create free account
hub / github.com/easy-graph/Easy-Graph / decode_data_elements

Method decode_data_elements

easygraph/readwrite/graphml.py:965–1021  ·  view source on GitHub ↗

Use the key information to decode the data XML if present.

(self, graphml_keys, obj_xml)

Source from the content-addressed store, hash-verified

963 G.add_edges_from([(source, target, edge_id, data)])
964
965 def decode_data_elements(self, graphml_keys, obj_xml):
966 """Use the key information to decode the data XML if present."""
967 data = {}
968 for data_element in obj_xml.findall(f"{{{self.NS_GRAPHML}}}data"):
969 key = data_element.get("key")
970 try:
971 data_name = graphml_keys[key]["name"]
972 data_type = graphml_keys[key]["type"]
973 except KeyError as err:
974 raise eg.EasyGraphError(f"Bad GraphML data: no key {key}") from err
975 text = data_element.text
976 # assume anything with subelements is a yfiles extension
977 if text is not None and len(list(data_element)) == 0:
978 if data_type == bool:
979 # Ignore cases.
980 # http://docs.oracle.com/javase/6/docs/api/java/lang/
981 # Boolean.html#parseBoolean%28java.lang.String%29
982 data[data_name] = self.convert_bool[text.lower()]
983 else:
984 data[data_name] = data_type(text)
985 elif len(list(data_element)) > 0:
986 # Assume yfiles as subelements, try to extract node_label
987 node_label = None
988 # set GenericNode's configuration as shape type
989 gn = data_element.find(f"{{{self.NS_Y}}}GenericNode")
990 if gn:
991 data["shape_type"] = gn.get("configuration")
992 for node_type in ["GenericNode", "ShapeNode", "SVGNode", "ImageNode"]:
993 pref = f"{{{self.NS_Y}}}{node_type}/{{{self.NS_Y}}}"
994 geometry = data_element.find(f"{pref}Geometry")
995 if geometry is not None:
996 data["x"] = geometry.get("x")
997 data["y"] = geometry.get("y")
998 if node_label is None:
999 node_label = data_element.find(f"{pref}NodeLabel")
1000 shape = data_element.find(f"{pref}Shape")
1001 if shape is not None:
1002 data["shape_type"] = shape.get("type")
1003 if node_label is not None:
1004 data["label"] = node_label.text
1005
1006 # check all the different types of edges avaivable in yEd.
1007 for edge_type in [
1008 "PolyLineEdge",
1009 "SplineEdge",
1010 "QuadCurveEdge",
1011 "BezierEdge",
1012 "ArcEdge",
1013 ]:
1014 pref = f"{{{self.NS_Y}}}{edge_type}/{{{self.NS_Y}}}"
1015 edge_label = data_element.find(f"{pref}EdgeLabel")
1016 if edge_label is not None:
1017 break
1018
1019 if edge_label is not None:
1020 data["label"] = edge_label.text
1021 return data
1022

Callers 3

make_graphMethod · 0.95
add_nodeMethod · 0.95
add_edgeMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected