diff --git a/src/bioflowinsighterror.py b/src/bioflowinsighterror.py index a9489087bed4ec55b7076ceceb09c1f9e36a1f55..f7490de97df3fd62e36a47897b55796b10c6700a 100644 --- a/src/bioflowinsighterror.py +++ b/src/bioflowinsighterror.py @@ -11,7 +11,6 @@ class BioFlowInsightError(Exception): """ def __init__(self, error, num, origin = None): self.origin = origin - #TODO -> add message at the end if(origin!=None): super().__init__(f"[{num}] Error in the file '{self.origin.get_file_address()}': "+error) else: diff --git a/src/condition.py b/src/condition.py index da5da0301ca34a45697ed8bde016bbeff2520940..34a1fcbe8cfddb9ccc9524f6af7d28aed790c45c 100644 --- a/src/condition.py +++ b/src/condition.py @@ -16,6 +16,8 @@ class Condition: conditions_dico = self.origin.get_file_conditions() + #conditions_dico_temp = extract_conditions(code) + #print(conditions_dico==conditions_dico_temp) pos = code.find(thing_defined) for c in conditions_dico: condition_extend = conditions_dico[c] diff --git a/src/include.py b/src/include.py index 3ff4fff9e145511f6216b3a3d048ef99c7be40b3..35ccf9ddabff89954803e3de175b7f47a396ec5c 100644 --- a/src/include.py +++ b/src/include.py @@ -125,8 +125,6 @@ class Include(Nextflow_Building_Blocks): for match in re.finditer(pattern_as, include): found = True if(self.get_duplicate_status()): - #TODO -> try shallow copy too - #thing_as = copy.copy(self.file.get_element_from_name(match.group(1))) thing_as = copy.deepcopy(self.file.get_element_from_name(match.group(1))) thing_as.set_alias(match.group(3)) self.defines.append(thing_as) diff --git a/src/main_DSL2.py b/src/main_DSL2.py index ecde61bf97ed5d23913a2ba192d76c84e8f276f6..7360194ba2718dc4fcab0be0ac288a3d96e1507b 100644 --- a/src/main_DSL2.py +++ b/src/main_DSL2.py @@ -1,23 +1,30 @@ from .nextflow_building_blocks import Nextflow_Building_Blocks from .bioflowinsighterror import BioFlowInsightError import re -from .outils import get_dico_from_tab_from_id +from .outils import get_dico_from_tab_from_id, extract_conditions from . import constant + class Main_DSL2(Nextflow_Building_Blocks): def __init__(self, code, origin): Nextflow_Building_Blocks.__init__(self, code) self.origin = origin self.calls = [] self.initialised = False + self.conditions=None def get_channels(self): return self.channels def get_workflow_code(self): return self.get_code() + + def get_file_conditions(self): + if(self.conditions==None): + self.conditions = extract_conditions(self.get_code()) + return self.conditions def get_type(self): return "Main DSL2" diff --git a/src/nextflow_file.py b/src/nextflow_file.py index e199cf541b3dd6dc8f2ed19fec2f516d9eb38ad0..f4112fdf9306c71f9523b4132926e81c2f409fc3 100644 --- a/src/nextflow_file.py +++ b/src/nextflow_file.py @@ -37,9 +37,8 @@ class Nextflow_File(Nextflow_Building_Blocks): if(self.first_file==True): self.origin.set_DSL(self.which_DSL()) self.graph = None - self.conditions = extract_conditions(self.get_code()) - self.added_2_rocrate = False + self.conditions=None self.check_file_correctness() self.do_start_stuff() #self.extract_metadata() @@ -55,6 +54,8 @@ class Nextflow_File(Nextflow_Building_Blocks): return self.get_code() def get_file_conditions(self): + if(self.conditions==None): + self.conditions = extract_conditions(self.get_code()) return self.conditions @@ -237,16 +238,14 @@ class Nextflow_File(Nextflow_Building_Blocks): def which_DSL(self): DSL = "DSL2" #If there are include - self.extract_includes() - if(len(self.includes)>0): + pattern = constant.FULL_INLCUDE_2 + for match in re.finditer(pattern, self.get_code()): return DSL #If there are subworkflows - self.extract_subworkflows() - if(len(self.subworkflows)>0): + for match in re.finditer(constant.SUBWORKFLOW_HEADER, self.get_code()): return DSL #If there is the main - self.extract_main() - if(self.main!=None): + for match in re.finditer(constant.WORKFLOW_HEADER_2, '\n'+self.get_code()+'\n'): return DSL #Analyse the processes self.extract_processes() diff --git a/src/outils.py b/src/outils.py index c4004c6b6090063da174658907b13cac66cefbcd..3b7bc90e34634439f0b4ba46736b0341cd44e8e8 100644 --- a/src/outils.py +++ b/src/outils.py @@ -975,9 +975,7 @@ def extract_conditions(code): if(code[start-1]!="\\" or (code[start-1]=="\\" and code[start-2]=="\\")): quote_double=False - #TODO add "else if" compatibaliaty #TODO Right now -> support only for if/else written with curlies -> not on single line - def adding_inside(conditions_dico, code, start_inside, end_inside): temp_dico = extract_conditions(code[start_inside:end_inside]) for c in temp_dico: