@@ -77,6 +77,10 @@ def get_as_networkx(self, directed=True):
7777 nodes = {}
7878 rels = {}
7979 table_to_label_dict = {}
80+ table_primary_key_dict = {}
81+
82+ def encode_node_id (node , table_primary_key_dict ):
83+ return node ['_label' ] + "_" + str (node [table_primary_key_dict [node ['_label' ]]])
8084
8185 # De-duplicate nodes and rels
8286 while self .has_next ():
@@ -98,17 +102,24 @@ def get_as_networkx(self, directed=True):
98102 for node in nodes .values ():
99103 _id = node ["_id" ]
100104 node_id = node ['_label' ] + "_" + str (_id ["offset" ])
105+ if node ['_label' ] not in table_primary_key_dict :
106+ props = self .connection ._get_node_property_names (node ['_label' ])
107+ for prop_name in props :
108+ if props [prop_name ]['is_primary_key' ]:
109+ table_primary_key_dict [node ['_label' ]] = prop_name
110+ break
111+ node_id = encode_node_id (node , table_primary_key_dict )
101112 node [node ['_label' ]] = True
102113 nx_graph .add_node (node_id , ** node )
103114
104115 # Add rels
105116 for rel in rels .values ():
106117 _src = rel ["_src" ]
107118 _dst = rel ["_dst" ]
108- src_id = str (
109- table_to_label_dict [ _src ["table" ]]) + "_" + str ( _src ["offset" ])
110- dst_id = str (
111- table_to_label_dict [ _dst [ "table" ]]) + "_" + str ( _dst [ "offset" ] )
119+ src_node = nodes [( _src [ "table" ], _src [ "offset" ])]
120+ dst_node = nodes [( _dst ["table" ], _dst ["offset" ])]
121+ src_id = encode_node_id ( src_node , table_primary_key_dict )
122+ dst_id = encode_node_id ( dst_node , table_primary_key_dict )
112123 nx_graph .add_edge (src_id , dst_id , ** rel )
113124 return nx_graph
114125
0 commit comments