flowcraft/generator/pipeline_parser.py
def add_unique_identifiers(pipeline_str):
    """Returns the pipeline string with unique identifiers and a dictionary with
     references between the unique keys and the original values

    Parameters
    ----------
    pipeline_str : str
        Pipeline string

    Returns
    -------
    str
        Pipeline string with unique identifiers
    dict
        Match between process unique values and original names
    """

    # Add space at beginning and end of pipeline to allow regex mapping of final
    # process in linear pipelines
    pipeline_str_modified = " {} ".format(pipeline_str)

    # Regex to get all process names. Catch all words without spaces and that
    # are not fork tokens or pipes
    reg_find_proc = r"[^\s{}{}{}]+".format(LANE_TOKEN, FORK_TOKEN, CLOSE_TOKEN)
    process_names = re.findall(reg_find_proc, pipeline_str_modified)

    identifiers_to_tags = {}
    """
    dict: Matches new process names (identifiers) with original process 
    names
    """

    new_process_names = []
    """
    list: New process names used to replace in the pipeline string
    """

    # Assigns the new process names by appending a numeric id at the end of
    # the process name
    for index, val in enumerate(process_names):
        if "=" in val:
            parts = val.split("=")
            new_id = "{}_{}={}".format(parts[0], index, parts[1])
        else:
            new_id = "{}_{}".format(val, index)

        # add new process with id
        new_process_names.append(new_id)
        # makes a match between new process name and original process name
        identifiers_to_tags[new_id] = val

    # Add space between forks, pipes and the process names for the replace
    # regex to work
    match_result = lambda match: " {} ".format(match.group())

    # force to add a space between each token so that regex modification can
    # be applied
    find = r'[{}{}{}]+'.format(FORK_TOKEN, LANE_TOKEN, CLOSE_TOKEN)
    pipeline_str_modified = re.sub(find, match_result, pipeline_str_modified)

    # Replace original process names by the unique identifiers
    for index, val in enumerate(process_names):
        # regex to replace process names with non assigned process ids
        # escape characters are required to match to the dict keys
        # (identifiers_to_tags), since python keys with escape characters
        # must be escaped
        find = r'{}[^_]'.format(val).replace("\\", "\\\\")
        pipeline_str_modified = re.sub(find, new_process_names[index] + " ",
                                       pipeline_str_modified, 1)

    return pipeline_str_modified, identifiers_to_tags
def add_unique_identifiers(pipeline_str):
    # Add space at beginning and end of pipeline to allow regex mapping of final
    # process in linear pipelines
    pipeline_str_modified = " {} ".format(pipeline_str)

    # Regex to get all process names. Catch all words without spaces and that
    # are not fork tokens or pipes
    reg_find_proc = r"[^\s{}{}{}]+".format(LANE_TOKEN, FORK_TOKEN, CLOSE_TOKEN)
    process_names = re.findall(reg_find_proc, pipeline_str_modified)

    identifiers_to_tags = {}
    """
    dict: Matches new process names (identifiers) with original process 
    names
    """

    new_process_names = []
    """
    list: New process names used to replace in the pipeline string
    """

    # Assigns the new process names by appending a numeric id at the end of
    # the process name
    for index, val in enumerate(process_names):
        if "=" in val:
            parts = val.split("=")
            new_id = "{}_{}={}".format(parts[0], index, parts[1])
        else:
            new_id = "{}_{}".format(val, index)

        # add new process with id
        new_process_names.append(new_id)
        # makes a match between new process name and original process name
        identifiers_to_tags[new_id] = val

    # Add space between forks, pipes and the process names for the replace
    # regex to work
    match_result = lambda match: " {} ".format(match.group())

    # force to add a space between each token so that regex modification can
    # be applied
    find = r'[{}{}{}]+'.format(FORK_TOKEN, LANE_TOKEN, CLOSE_TOKEN)
    pipeline_str_modified = re.sub(find, match_result, pipeline_str_modified)

    # Replace original process names by the unique identifiers
    for index, val in enumerate(process_names):
        # regex to replace process names with non assigned process ids
        # escape characters are required to match to the dict keys
        # (identifiers_to_tags), since python keys with escape characters
        # must be escaped
        find = r'{}[^_]'.format(val).replace("\\", "\\\\")
        pipeline_str_modified = re.sub(find, new_process_names[index] + " ",
                                       pipeline_str_modified, 1)

    return pipeline_str_modified, identifiers_to_tags
def add_unique_identifiers ( pipeline_str ) : # Add space at beginning and end of pipeline to allow regex mapping of final # process in linear pipelines pipeline_str_modified = " {} " . format ( pipeline_str ) # Regex to get all process names. Catch all words without spaces and that # are not fork tokens or pipes reg_find_proc = r"[^\s{}{}{}]+" . format ( LANE_TOKEN , FORK_TOKEN , CLOSE_TOKEN ) process_names = re . findall ( reg_find_proc , pipeline_str_modified ) identifiers_to_tags = { } """
    dict: Matches new process names (identifiers) with original process 
    names
    """ new_process_names = [ ] """
    list: New process names used to replace in the pipeline string
    """ # Assigns the new process names by appending a numeric id at the end of # the process name for index , val in enumerate ( process_names ) : if "=" in val : parts = val . split ( "=" ) new_id = "{}_{}={}" . format ( parts [ 0 ] , index , parts [ 1 ] ) else : new_id = "{}_{}" . format ( val , index ) # add new process with id new_process_names . append ( new_id ) # makes a match between new process name and original process name identifiers_to_tags [ new_id ] = val # Add space between forks, pipes and the process names for the replace # regex to work match_result = lambda match : " {} " . format ( match . group ( ) ) # force to add a space between each token so that regex modification can # be applied find = r'[{}{}{}]+' . format ( FORK_TOKEN , LANE_TOKEN , CLOSE_TOKEN ) pipeline_str_modified = re . sub ( find , match_result , pipeline_str_modified ) # Replace original process names by the unique identifiers for index , val in enumerate ( process_names ) : # regex to replace process names with non assigned process ids # escape characters are required to match to the dict keys # (identifiers_to_tags), since python keys with escape characters # must be escaped find = r'{}[^_]' . format ( val ) . replace ( "\\" , "\\\\" ) pipeline_str_modified = re . sub ( find , new_process_names [ index ] + " " , pipeline_str_modified , 1 ) return pipeline_str_modified , identifiers_to_tags
Returns the pipeline string with unique identifiers and a dictionary with
     references between the unique keys and the original values

    Parameters
    ----------
    pipeline_str : str
        Pipeline string

    Returns
    -------
    str
        Pipeline string with unique identifiers
    dict
        Match between process unique values and original names
Returns the pipeline string with unique identifiers and a dictionary with references between the unique keys and the original values