Exemple #1
0
def parse(conf_raw):
    # remove comments
    conf_raw = re.sub(r" *#.*?(\n|$)", "", conf_raw)
    # trim spaces and tabs
    conf_raw = re.sub(r"(?<=\n)( |\t)*|( |\t)*(?=\n)", "", conf_raw)
    # remove empty lines (start|middle|end)
    conf_raw = re.sub(r"^\n+|(?<=\n)\n+|\n+$", "", conf_raw)
    
    # split by lines
    conf_lines = conf_raw.split("\n")
    
    # prepare dict
    conf_dict = {
        'FLAGS':[],
        'ROOT':[],
        'NOCOPY':[],
        'NOREMOVE':[],
        'PATHS':[]
    }
    # define option variables
    opt_name = None
    opt_pair = None
    
    # parse into dict
    for conf_line in conf_lines:
        # check for an [option header]
        opt_match = re.search("(?<=\[).*?(?=\])", conf_line)
        
        if opt_match: # add new option
            opt_name = opt_match.group(0)
            # check for default option, else is path pair
            opt_pair = opt_name not in conf_dict
            if opt_pair:
                # parse path pair into list
                opt_pair = parse_dir_pattern(opt_name)
        elif opt_name: # add to current option
            if opt_pair:
                file_pair = parse_file_pattern(conf_line)
                for n in [0,1]:
                    file_pair[n] = add_root_path(file_pair[n], opt_pair[n])
                conf_dict['PATHS'].append(file_pair)
            else:
                if opt_name == 'ROOT': var = format_dir_path(conf_line)
                elif opt_name == 'FLAGS': var = conf_line
                else: var = format_file_path(conf_line)
                conf_dict[opt_name].append(var)
    # set each flag if it wasn't passed from cli
    for name in conf_dict['FLAGS']:
        if ARG.get(name) == None:
            ARG.set(name, True)
    
    return conf_dict['ROOT'], conf_dict['PATHS'], conf_dict['NOCOPY'], conf_dict['NOREMOVE']
Exemple #2
0
def cli_init():
    global ARG;
    ARG.description('Berthes')
    ARG.add('COPY', opt='cp', help='copy to backup dirs')
    ARG.add('ASKCOPY', opt='acp', help='ask for each copy')
    ARG.add('CLEAN', opt='cl', help='clean backup dirs')
    ARG.add('ASKREMOVE', opt='arm', help='ask for each remove')
    ARG.add('DRYRUN', opt='dr', help='perform a dry run')
    ARG.add('VERBOSE', opt='v', help='be verbose')
    ARG.parser.add_argument('-conf', metavar='conf_path', help='path to config file')
    ARG.parse()