Path: blob/master/scenario-notebooks/UserSecurityMetadata/GraphVis.py
3253 views
# -------------------------------------------------------------------------1# Copyright (c) Microsoft Corporation. All rights reserved.2# Licensed under the MIT License. See License.txt in the project root for3# license information.4# --------------------------------------------------------------------------5from pathlib import Path6from string import Template7from NodeEdge import Node, Edge8import jsonpickle91011class GraphVis:12def __init__(self):13self.nodes = set()14self.edges = set()1516def addEdge(self, fromNode, toNode, label):17if fromNode.group != "User" and fromNode.group != "Group" and fromNode.group != "AzureSubscription" and fromNode.group != "ServicePrincipal":18raise Exception("Error: Unsupported node type - " +19jsonpickle.encode(fromNode, unpicklable=False, make_refs=False))20if toNode.group != "User" and toNode.group != "Group" and toNode.group != "AzureSubscription" and toNode.group != "ServicePrincipal":21raise Exception("Error: Unsupported node type - " +22jsonpickle.encode(toNode, unpicklable=False, make_refs=False))23self.nodes.add(fromNode)24self.nodes.add(toNode)25edge = Edge(fromNode.id, toNode.id, label)26self.edges.add(edge)2728def getHtml(self):29htmlTemplate = Template(Path('./graph.html.template').read_text())30nodesJson = jsonpickle.encode(31self.nodes, unpicklable=False, make_refs=False)32edgesJson = jsonpickle.encode(33self.edges, unpicklable=False, make_refs=False).replace("from_", "from")34return htmlTemplate.substitute(NODES=nodesJson, EDGES=edgesJson)353637