def get_nodes_and_edges(self, graph_data,nodes=None,edges=None, text_field='Key', append_key_to_text=False): if nodes is None: nodes = [] if edges is None: edges = [] for key,issue in graph_data.get('nodes').items(): if issue and issue.get('Summary'): text = issue.get(text_field) if append_key_to_text: text += " | {0}".format(key) nodes.append({'key': key, 'text': text , 'color': Misc.get_random_color()}) for edge in graph_data.get('edges'): edges.append({ 'from': edge[0], 'text' : edge[1] ,'to': edge[2] ,'color': Misc.get_random_color()}) return nodes,edges
def mindmap(team_id=None, channel=None, params=None): (go_js, graph_data) = Go_Js_Views._get_graph_data(params, "mindmap",headless=True) go_js.load_page(False) (nodes, edges) = Go_Js_Views._get_nodes_and_edges(graph_data,text_field='Summary') data = { "class": "go.TreeModel", "nodeDataArray": []} width = Misc.to_int(Misc.array_pop(params, 0)) height = Misc.to_int(Misc.array_pop(params, 0)) if width and height: go_js.browser().sync__browser_width(width,height) else: go_js.set_browser_width_based_on_nodes(nodes) nodes_indexed = {} for index, node in enumerate(nodes): key = node.get('key') text = "{1} | {0}".format(key,node.get('text')) nodes_indexed[key] = {'index':index, 'text': text } root_node_text = "{1} | {0}".format(nodes[0].get('key'), nodes[0].get('text')) data['nodeDataArray'].append({"key": 0, "text": root_node_text }) # add root node first for edge in edges: from_key = edge['from'] to_key = edge['to'] from_issue = nodes_indexed.get(from_key) to_issue = nodes_indexed.get(to_key) if from_issue: parent = nodes_indexed.get(edge['from']).get('index') else: parent = from_key if to_issue: key = nodes_indexed.get(edge['to' ]).get('index') text = nodes_indexed.get(edge['to' ]).get('text') else: key = to_key text = to_key item = {"key": key, "parent": parent, "text": text, "brush": Misc.get_random_color()} data['nodeDataArray'].append(item) go_js.invoke_js("create_graph_from_json", data) js_code = 'layoutAll()' go_js.api_browser.sync__await_for_element('#animationFinished') Dev.pprint(go_js.exec_js(js_code)) return go_js.send_screenshot_to_slack(team_id=team_id, channel=channel)