Created
May 11, 2018 22:13
-
-
Save tylertreat/c26e597a61d5bf5377d0c3b6b5b64fb1 to your computer and use it in GitHub Desktop.
Super janky script to convert graphson to DOT format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import sys | |
def main(): | |
graphson_file = sys.argv[1] | |
_to_dot_graph(graphson_file) | |
def _to_dot_graph(graphson_file): | |
vertices_by_id = {} | |
with open(graphson_file) as f: | |
for l in f: | |
vertex = json.loads(l) | |
vertices_by_id[vertex['id']] = vertex | |
graph = {} | |
for vid, vertex in vertices_by_id.items(): | |
node = {'name': vertex['label'] + ':' + vertex.get('name', '') + str(vid), 'label': vertex['label']} | |
outE = vertex.get('outE') | |
if outE: | |
node_edges = {} | |
for label, edges in outE.items(): | |
label_edges = [] | |
for edge in edges: | |
ref = vertices_by_id[edge['inV']] | |
label_edges.append(ref) | |
node_edges[label] = label_edges | |
node['edges'] = node_edges | |
else: | |
node['edges'] = {} | |
graph[vid] = node | |
for vid, vertex in vertices_by_id.items(): | |
inE = vertex.get('inE') | |
if not inE: | |
continue | |
for label, edges in inE.items(): | |
for edge in edges: | |
outV = vertices_by_id[edge['outV']] | |
outNode = graph[outV['id']] | |
label_edges = outNode['edges'].get(label) | |
if not label_edges: | |
label_edges = [] | |
outNode['edges'][label] = label_edges | |
label_edges.append(vertex) | |
dedupe = set() | |
for vid, node in graph.items(): | |
if node['label'] == 'User' or node['label'] == 'RootFolder' or node['label'] == 'Account' or node['label'] == 'PostalAddress': | |
continue | |
outE = node.get('edges') | |
if not outE: | |
dedupe.add(node['name']) | |
continue | |
for label, edges in outE.items(): | |
for edge in edges: | |
if edge['label'] == 'User': | |
continue | |
dedupe.add(node['name'] + ' -> ' + edge['label'] + ':' + str(edge['id']) + '[label="' + label + '"]') | |
with open(graphson_file + '.dot', 'w+') as out: | |
out.write('digraph {\n') | |
for line in dedupe: | |
out.write('\t' + line + ';\n') | |
out.write('}') | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment