diff --git a/src/nextflow_building_blocks.py b/src/nextflow_building_blocks.py index 5f8de682353448b24f7f38794320c4e3d259907e..0c600056b09d2a1acee8413b0126147c2f505a61 100644 --- a/src/nextflow_building_blocks.py +++ b/src/nextflow_building_blocks.py @@ -80,6 +80,11 @@ class Nextflow_Building_Blocks: def get_rocrate_key(self, dico): return f"{self.get_file_address()[len(dico['temp_directory'])+1:]}#{self.get_name()}" + def get_address(self): + return self.origin.get_address() + + def get_workflow_address(self): + return self.origin.get_workflow_address() diff --git a/src/nextflow_file.py b/src/nextflow_file.py index 5eadc6e8a676d75238c67460a14eb14408092712..4a43c443131d603a9a19ff822af9615ef9a3528c 100644 --- a/src/nextflow_file.py +++ b/src/nextflow_file.py @@ -115,6 +115,13 @@ class Nextflow_File(Nextflow_Building_Blocks): return self.display_info else: return self.origin.get_display_info() + + + def get_workflow_address(self): + if(self.origin==None): + return self.workflow.get_workflow_directory() + else: + return self.origin.get_workflow_address() @@ -259,6 +266,7 @@ class Nextflow_File(Nextflow_Building_Blocks): def get_DSL(self): return self.DSL + #Method which returns the DSL of the workflow -> by default it's DSL2 #I use the presence of include, subworkflows and into/from in processes as a proxy def which_DSL(self): diff --git a/src/process.py b/src/process.py index ef3d22233b8f77adad3512ebaedbe7b0210e922e..78f39e444f36c579bf939e81abaa4da4936f3002 100644 --- a/src/process.py +++ b/src/process.py @@ -1,4 +1,5 @@ import re +import glob from .code_ import Code from .nextflow_building_blocks import Nextflow_Building_Blocks @@ -53,6 +54,36 @@ class Process(Nextflow_Building_Blocks): return self.tools + def get_external_scripts_call(self): + code = self.get_script_code() + tab = [] + for match in re.finditer(r"([^\s\\\*]+\.(sh|py|R|r|pl))[^\w]", code): + tab.append(match.group(1)) + return list(set(tab)) + + def get_external_scripts_code(self): + calls = self.get_external_scripts_call() + #workflow_directory = self.origin.get_address() + #print(workflow_directory) + #import os + #print(os.getcwd(), self.origin.get_address(), self.get_workflow_address()) + + for call in calls: + #Check first if the file is in the bin + file = glob.glob(f'{self.get_workflow_address()}/bin/**/{call}', recursive=True) + if(len(file)>1): + print(file) + print("More than one file found!") + #If not we search again + if(len(file)==0): + file = glob.glob(f'{self.get_workflow_address()}/**/{call}', recursive=True) + if(len(file)>1): + print(file) + print("More than one file found!") + + + + #def get_source(self): # return [self] diff --git a/src/workflow.py b/src/workflow.py index c3b6dae565ba33e0fd84e2c14470360bc9fa9245..5565d677579040ffcd5ed16334d91112185d9212 100644 --- a/src/workflow.py +++ b/src/workflow.py @@ -67,6 +67,7 @@ class Workflow: output_dir=output_dir, workflow = self ) + self.workflow_directory = '/'.join(file.split('/')[:-1]) self.output_dir = Path(output_dir) self.rocrate = None self.name = name @@ -133,6 +134,15 @@ class Workflow: """ return self.address + + def get_workflow_directory(self): + """Method that returns the workflow directory + + Keyword arguments: + + """ + return self.workflow_directory + def set_address(self): """Method that sets the adress of the workflow main