Use the key information to decode the data XML if present.
(self, graphml_keys, obj_xml)
| 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 |
no outgoing calls
no test coverage detected