13
13
14
14
15
15
def _from_dfs (
16
- node_dfs : DFS_TYPE ,
16
+ node_dfs : Optional [ DFS_TYPE ] ,
17
17
rel_dfs : DFS_TYPE ,
18
18
node_radius_min_max : Optional [tuple [float , float ]] = (3 , 60 ),
19
19
rename_properties : Optional [dict [str , str ]] = None ,
20
20
) -> VisualizationGraph :
21
+ relationships = _parse_relationships (rel_dfs , rename_properties = rename_properties )
22
+
23
+ if node_dfs is None :
24
+ has_size = False
25
+ node_ids = set ()
26
+ for rel in relationships :
27
+ node_ids .add (rel .source )
28
+ node_ids .add (rel .target )
29
+ nodes = [Node (id = id ) for id in node_ids ]
30
+ else :
31
+ nodes , has_size = _parse_nodes (node_dfs , rename_properties = rename_properties )
32
+
33
+ VG = VisualizationGraph (nodes = nodes , relationships = relationships )
34
+
35
+ if node_radius_min_max is not None and has_size :
36
+ VG .resize_nodes (node_radius_min_max = node_radius_min_max )
37
+
38
+ return VG
39
+
40
+
41
+ def _parse_nodes (node_dfs : DFS_TYPE , rename_properties : Optional [dict [str , str ]]) -> tuple [list [Node ], bool ]:
21
42
if isinstance (node_dfs , DataFrame ):
22
43
node_dfs_iter : Iterable [DataFrame ] = [node_dfs ]
44
+ elif node_dfs is None :
45
+ node_dfs_iter = []
23
46
else :
24
47
node_dfs_iter = node_dfs
25
48
26
49
all_node_field_aliases = Node .all_validation_aliases ()
27
- all_rel_field_aliases = Relationship .all_validation_aliases ()
28
50
29
51
has_size = True
30
52
nodes = []
@@ -42,13 +64,18 @@ def _from_dfs(
42
64
properties [key ] = value
43
65
44
66
nodes .append (Node (** top_level , properties = properties ))
67
+ return nodes , has_size
68
+
69
+
70
+ def _parse_relationships (rel_dfs : DFS_TYPE , rename_properties : Optional [dict [str , str ]]) -> list [Relationship ]:
71
+ all_rel_field_aliases = Relationship .all_validation_aliases ()
45
72
46
73
if isinstance (rel_dfs , DataFrame ):
47
74
rel_dfs_iter : Iterable [DataFrame ] = [rel_dfs ]
48
75
else :
49
76
rel_dfs_iter = rel_dfs
77
+ relationships : list [Relationship ] = []
50
78
51
- relationships = []
52
79
for rel_df in rel_dfs_iter :
53
80
for _ , row in rel_df .iterrows ():
54
81
top_level = {}
@@ -62,17 +89,11 @@ def _from_dfs(
62
89
properties [key ] = value
63
90
64
91
relationships .append (Relationship (** top_level , properties = properties ))
65
-
66
- VG = VisualizationGraph (nodes = nodes , relationships = relationships )
67
-
68
- if node_radius_min_max is not None and has_size :
69
- VG .resize_nodes (node_radius_min_max = node_radius_min_max )
70
-
71
- return VG
92
+ return relationships
72
93
73
94
74
95
def from_dfs (
75
- node_dfs : DFS_TYPE ,
96
+ node_dfs : Optional [ DFS_TYPE ] ,
76
97
rel_dfs : DFS_TYPE ,
77
98
node_radius_min_max : Optional [tuple [float , float ]] = (3 , 60 ),
78
99
) -> VisualizationGraph :
@@ -85,8 +106,9 @@ def from_dfs(
85
106
86
107
Parameters
87
108
----------
88
- node_dfs: Union[DataFrame, Iterable[DataFrame]]
109
+ node_dfs: Optional[ Union[DataFrame, Iterable[DataFrame] ]]
89
110
DataFrame or iterable of DataFrames containing node data.
111
+ If None, the nodes will be created from the source and target node ids in the rel_dfs.
90
112
rel_dfs: Union[DataFrame, Iterable[DataFrame]]
91
113
DataFrame or iterable of DataFrames containing relationship data.
92
114
node_radius_min_max : tuple[float, float], optional
0 commit comments