1414 GraphAdjDict ,
1515 MultiDiGraphAdjDict ,
1616 MultiGraphAdjDict ,
17+ NodeDict ,
1718)
1819
1920from nx_arangodb .exceptions import EdgeTypeAmbiguity , MultipleEdgesFound
@@ -210,13 +211,13 @@ def __contains__(self, key: str) -> bool:
210211 @logger_debug
211212 def __getitem__ (self , key : str ) -> Any :
212213 """G._adj['node/1']['node/2']['foo']"""
213- if value := self .data . get ( key ) :
214- return value
214+ if key in self .data :
215+ return self . data [ key ]
215216
216217 assert self .edge_id
217218 result = aql_doc_get_key (self .db , self .edge_id , key , self .parent_keys )
218219
219- if not result :
220+ if result is None :
220221 raise KeyError (key )
221222
222223 edge_attr_dict_value = process_edge_attr_dict_value (self , key , result )
@@ -637,6 +638,14 @@ def __len__(self) -> int:
637638 @logger_debug
638639 def __iter__ (self ) -> Iterator [str ]:
639640 """for k in g._adj['node/1']['node/2']"""
641+ if not (self .FETCHED_ALL_DATA or self .FETCHED_ALL_IDS ):
642+ self ._fetch_all ()
643+
644+ yield from self .data .keys ()
645+
646+ @logger_debug
647+ def keys (self ) -> Any :
648+ """g._adj['node/1']['node/2'].keys()"""
640649 if self .FETCHED_ALL_IDS :
641650 yield from self .data .keys ()
642651
@@ -661,11 +670,6 @@ def __iter__(self) -> Iterator[str]:
661670 self .data [edge_id ] = self .edge_attr_dict_factory ()
662671 yield edge_id
663672
664- @logger_debug
665- def keys (self ) -> Any :
666- """g._adj['node/1']['node/2'].keys()"""
667- return self .__iter__ ()
668-
669673 @logger_debug
670674 def values (self ) -> Any :
671675 """g._adj['node/1']['node/2'].values()"""
@@ -1165,6 +1169,14 @@ def __len__(self) -> int:
11651169 @logger_debug
11661170 def __iter__ (self ) -> Iterator [str ]:
11671171 """for k in g._adj['node/1']"""
1172+ if not (self .FETCHED_ALL_DATA or self .FETCHED_ALL_IDS ):
1173+ self ._fetch_all ()
1174+
1175+ yield from self .data .keys ()
1176+
1177+ @logger_debug
1178+ def keys (self ) -> Any :
1179+ """g._adj['node/1'].keys()"""
11681180 if self .FETCHED_ALL_IDS :
11691181 yield from self .data .keys ()
11701182
@@ -1182,11 +1194,6 @@ def __iter__(self) -> Iterator[str]:
11821194 self .__contains_helper (edge_id )
11831195 yield edge_id
11841196
1185- @logger_debug
1186- def keys (self ) -> Any :
1187- """g._adj['node/1'].keys()"""
1188- return self .__iter__ ()
1189-
11901197 @logger_debug
11911198 def clear (self ) -> None :
11921199 """G._adj['node/1'].clear()"""
@@ -1528,6 +1535,14 @@ def __len__(self) -> int:
15281535 @logger_debug
15291536 def __iter__ (self ) -> Iterator [str ]:
15301537 """for k in g._adj"""
1538+ if not (self .FETCHED_ALL_DATA or self .FETCHED_ALL_IDS ):
1539+ self ._fetch_all ()
1540+
1541+ yield from self .data .keys ()
1542+
1543+ @logger_debug
1544+ def keys (self ) -> Any :
1545+ """g._adj.keys()"""
15311546 if self .FETCHED_ALL_IDS :
15321547 yield from self .data .keys ()
15331548
@@ -1540,11 +1555,6 @@ def __iter__(self) -> Iterator[str]:
15401555 self .data [node_id ] = lazy_adjlist_inner_dict
15411556 yield node_id
15421557
1543- @logger_debug
1544- def keys (self ) -> Any :
1545- """g._adj.keys()"""
1546- return self .__iter__ ()
1547-
15481558 @logger_debug
15491559 def clear (self ) -> None :
15501560 """g._node.clear()"""
@@ -1599,15 +1609,15 @@ def items(self, data: str | None = None, default: Any | None = None) -> Any:
15991609
16001610 else :
16011611 e_cols = [ed ["edge_collection" ] for ed in self .graph .edge_definitions ()]
1602- result = aql_fetch_data_edge (self .db , e_cols , data , default )
1603- yield from result
1612+ yield from aql_fetch_data_edge (self .db , e_cols , data , default )
16041613
16051614 @logger_debug
16061615 def __set_adj_elements (
16071616 self ,
1608- edges_dict : (
1617+ adj_dict : (
16091618 GraphAdjDict | DiGraphAdjDict | MultiGraphAdjDict | MultiDiGraphAdjDict
16101619 ),
1620+ node_dict : NodeDict | None = None ,
16111621 ) -> None :
16121622 def set_edge_graph (
16131623 src_node_id : str , dst_node_id : str , edge : dict [str , Any ]
@@ -1691,7 +1701,11 @@ def propagate_edge_directed_symmetric(
16911701 )
16921702 )
16931703
1694- for src_node_id , inner_dict in edges_dict .items ():
1704+ if node_dict is not None :
1705+ for node_id in node_dict .keys ():
1706+ self .__set_adj_inner_dict (self , node_id )
1707+
1708+ for src_node_id , inner_dict in adj_dict .items ():
16951709 for dst_node_id , edge_or_edges in inner_dict .items ():
16961710
16971711 self .__set_adj_inner_dict (self , src_node_id )
@@ -1721,16 +1735,16 @@ def _fetch_all(self) -> None:
17211735 self .clear ()
17221736
17231737 (
1724- _ ,
1738+ node_dict ,
17251739 adj_dict ,
17261740 * _ ,
17271741 ) = get_arangodb_graph (
17281742 self .graph ,
1729- load_node_dict = False ,
1743+ load_node_dict = True ,
17301744 load_adj_dict = True ,
17311745 load_coo = False ,
17321746 edge_collections_attributes = set (), # not used
1733- load_all_vertex_attributes = False , # not used
1747+ load_all_vertex_attributes = False ,
17341748 load_all_edge_attributes = True ,
17351749 is_directed = self .is_directed ,
17361750 is_multigraph = self .is_multigraph ,
@@ -1740,7 +1754,7 @@ def _fetch_all(self) -> None:
17401754 if self .is_directed :
17411755 adj_dict = adj_dict ["succ" ]
17421756
1743- self .__set_adj_elements (adj_dict )
1757+ self .__set_adj_elements (adj_dict , node_dict )
17441758
17451759 self .FETCHED_ALL_DATA = True
17461760 self .FETCHED_ALL_IDS = True
0 commit comments