def pathSourcetoSink(fsm,crawl): graph = fsm.graph criticalStates = fsm.criticalStates sink_nodes = [node for node, outdegree in graph.out_degree (graph.nodes()).items() if outdegree == 0] source_nodes = [node for node, indegree in graph.in_degree (graph.nodes()).items() if indegree == 0] if source_nodes == []: source_nodes.append(0) wflow_no = 1 for sink in sink_nodes: for source in source_nodes: for path in nx.all_simple_paths(graph, source=source, target=sink): print path obj = Workflow(scan_id=crawl,wflow_no = wflow_no) obj.save() critical = False critical_path = False for i in range(len(path)-1): #print path[i] critical = False link = graph.edge[path[i]][path[i+1]][0]["event"].xpath header = graph.edge[path[i]][path[i+1]][0]["header"] dom = graph.node[path[i+1]]['nodedata'].domString wflow = Workflow.objects.get(scan_id=crawl,wflow_no = wflow_no) if path[i+1] in criticalStates: critical = True critical_path = True #print wflow.wflow_no linkobj = Link(wflow_id = wflow, link = link, order_id = i+1,header=header, response_dom=dom, critical_node=critical) linkobj.save() print graph.edge[path[i]][path[i+1]][0]["event"].xpath if critical_path==True: obj.critical = True obj.save() wflow_no+=1 start_url_header = fsm.start_header login_url_header = fsm.login_header login_dom = fsm.login_dom headerObj = StartHeader(scan_id=crawl,start_url_header=start_url_header,login_url_header=login_url_header, login_dom = login_dom) headerObj.save()