@@ -235,18 +235,18 @@ def __str__(self):
235
235
Format:
236
236
{
237
237
'edges':[
238
- " {
238
+ {
239
239
'source_arn': 'string', 'destination_arn': 'string',
240
240
'association_type': 'string'
241
- }" ,
241
+ },
242
242
...
243
243
],
244
244
'vertices':[
245
- " {
245
+ {
246
246
'arn': 'string', 'lineage_entity': 'string',
247
247
'lineage_source': 'string',
248
248
'_session': <sagemaker.session.Session object>
249
- }" ,
249
+ },
250
250
...
251
251
],
252
252
'startarn':[
@@ -271,7 +271,7 @@ def _import_visual_modules(self):
271
271
272
272
return cyto , JupyterDash , html , Input , Output
273
273
274
- def _get_verts (self ):
274
+ def _covert_vertices_to_tuples (self ):
275
275
"""Convert vertices to tuple format for visualizer."""
276
276
verts = []
277
277
# get vertex info in the form of (id, label, class)
@@ -283,24 +283,19 @@ def _get_verts(self):
283
283
verts .append ((vert .arn , vert .lineage_source , vert .lineage_entity ))
284
284
return verts
285
285
286
- def _get_edges (self ):
286
+ def _covert_edges_to_tuples (self ):
287
287
"""Convert edges to tuple format for visualizer."""
288
288
edges = []
289
289
# get edge info in the form of (source, target, label)
290
290
for edge in self .edges :
291
291
edges .append ((edge .source_arn , edge .destination_arn , edge .association_type ))
292
292
return edges
293
293
294
- def visualize (self ):
295
- """Visualize lineage query result."""
296
- cyto , JupyterDash , html , Input , Output = self ._import_visual_modules ()
297
-
298
- cyto .load_extra_layouts () # load "klay" layout (hierarchical layout) from extra layouts
299
- app = JupyterDash (__name__ )
300
-
294
+ def _get_visualization_elements (self ):
295
+ """Get elements for visualization."""
301
296
# get vertices and edges info for graph
302
- verts = self ._get_verts ()
303
- edges = self ._get_edges ()
297
+ verts = self ._covert_vertices_to_tuples ()
298
+ edges = self ._covert_edges_to_tuples ()
304
299
305
300
nodes = [
306
301
{"data" : {"id" : id , "label" : label }, "classes" : classes } for id , label , classes in verts
@@ -313,6 +308,17 @@ def visualize(self):
313
308
314
309
elements = nodes + edges
315
310
311
+ return elements
312
+
313
+ def visualize (self ):
314
+ """Visualize lineage query result."""
315
+ cyto , JupyterDash , html , Input , Output = self ._import_visual_modules ()
316
+
317
+ cyto .load_extra_layouts () # load "klay" layout (hierarchical layout) from extra layouts
318
+ app = JupyterDash (__name__ )
319
+
320
+ elements = self ._get_visualization_elements ()
321
+
316
322
app .layout = html .Div (
317
323
[
318
324
cyto .Cytoscape (
@@ -461,15 +467,17 @@ def visualize(self):
461
467
)
462
468
463
469
@app .callback (Output ("cytoscape-graph" , "elements" ),
464
- Input ("cytoscape-graph" , "tapNodeData" ))
465
- def selectNode (data ):
466
- for n in nodes :
467
- if data != None and n ["data" ]["id" ] == data ["id" ]:
470
+ Input ("cytoscape-graph" , "tapNodeData" ),
471
+ Input ("cytoscape-graph" , "elements" ))
472
+ def selectNode (tapData , elements ):
473
+ for n in elements :
474
+ if tapData != None and n ["data" ]["id" ] == tapData ["id" ]:
475
+ # if is tapped node, add "select" class to node
468
476
n ["classes" ] += " select"
469
- else :
477
+ elif "classes" in n :
478
+ # remove "select" class in "classes" if node not selected
470
479
n ["classes" ] = n ["classes" ].replace ("select" , "" )
471
480
472
- elements = nodes + edges
473
481
return elements
474
482
475
483
return app .run_server (mode = "inline" )
0 commit comments