diff --git a/src/call.py b/src/call.py index b79c9b7cb7d542331f30a7f1cb75067168c92f15..7740b65c623e9ad56ee8c62b521f160e504092c8 100644 --- a/src/call.py +++ b/src/call.py @@ -52,7 +52,7 @@ class Call(Executor): tab += [self.first_element_called] for para in self.parameters: if(para.get_type()=="Call"): - tab = para.get_elements_called(tab = tab.copy(), first_call = False) + tab = para.get_elements_called(tab_input = tab.copy(), first_call = False) temp = list(set(tab)) #del tab return temp diff --git a/src/function.py b/src/function.py index 9c55e969ae75cf2c9765c3ad81c3a0bb9bddb2a5..8c9ec00898d44f5123474c8ea93681d4fc408c7f 100644 --- a/src/function.py +++ b/src/function.py @@ -23,5 +23,8 @@ class Function(Nextflow_Building_Blocks): def get_name(self): return self.name + def add_2_rocrate(self, dico, parent_key): + None + diff --git a/src/graph.py b/src/graph.py index 73cca9fb6e1f10617376faef9bfdf96175e855ca..99c98ccc4d3017ae88863a1820007f6f972845f2 100644 --- a/src/graph.py +++ b/src/graph.py @@ -23,7 +23,48 @@ class Graph(): self.dico_flattened = {} - def initialise(self): + + + def initialise(self, processes_2_remove = []): + + def get_node_id(dico, process): + for node in dico["nodes"]: + if(node['name']==process): + return node['id'] + for sub in dico['subworkflows']: + res = get_node_id(dico['subworkflows'][sub], process) + if(res!=-1): + return res + return -1 + + #This function removes the process -> by the simpliest way -> it doesn't create new links + def remove_node(dico, node_id): + #Remove nodes + nodes_to_remove = [] + for node in dico["nodes"]: + if(node['id']==node_id): + nodes_to_remove.append(node) + for node in nodes_to_remove: + dico["nodes"].remove(node) + + #Remove edges + edges_to_remove = [] + for edge in dico["edges"]: + if(edge['A']==node_id): + edges_to_remove.append(edge) + if(edge['B']==node_id): + edges_to_remove.append(edge) + for edge in edges_to_remove: + dico["edges"].remove(edge) + + for sub in dico['subworkflows']: + remove_node(dico['subworkflows'][sub], node_id) + + for process in processes_2_remove: + node_id = get_node_id(self.full_dico, process) + remove_node(self.full_dico, node_id) + + self.get_graph_wo_branch_operations() self.get_graph_wo_operations() diff --git a/src/nextflow_file.py b/src/nextflow_file.py index e733855085e1e2f12ec0a1e19267b7080c71c8f6..b254a1d131689a86b1fe203fd3bc4b93bcc9c74c 100644 --- a/src/nextflow_file.py +++ b/src/nextflow_file.py @@ -637,9 +637,9 @@ class Nextflow_File(Nextflow_Building_Blocks): if(self.graph==None): self.graph = Graph(self) - def generate_all_graphs(self, render_graphs = True): + def generate_all_graphs(self, render_graphs = True, processes_2_remove = []): #Initialisation (obligatory) - self.graph.initialise() + self.graph.initialise(processes_2_remove = processes_2_remove) #Generate the different graphs self.graph.get_full_graph(render_graphs = render_graphs) diff --git a/src/workflow.py b/src/workflow.py index 6e0fcd3dea1509bee0a6958fd8fe9934bf801326..5342a54dbb774f56c1606f6f5936bfed3da3de56 100644 --- a/src/workflow.py +++ b/src/workflow.py @@ -123,5 +123,5 @@ class Workflow: self.nextflow_file.initialise() self.initialise_rocrate() - def generate_all_graphs(self, render_graphs = True): - self.nextflow_file.generate_all_graphs(render_graphs = render_graphs) + def generate_all_graphs(self, render_graphs = True, processes_2_remove = []): + self.nextflow_file.generate_all_graphs(render_graphs = render_graphs, processes_2_remove = processes_2_remove)