def __init__(self, arg_parser=default_arg_parser, key_value_delimiters=['=', ':'], comment_seperators=[], key_delimiters=[','], section_override_delimiters=["."]): """ CliParser parses arguments from the command line or a custom list of items that my look like this: ['-a', '-b', 'b1', 'b2', 'setting=value', 'section.setting=other_value', 'key1,section.key2=value2'] :param arg_parser: Instance of ArgParser() that is used to parse none-setting arguments :param key_value_delimiters: delimiters to separate key and value in setting arguments :param comment_seperators: allowed prefixes for comments :param key_delimiters: delimiter to separate multiple keys of a setting argument :param section_override_delimiters: The delimiter to delimit the section from the key name (e.g. the '.' in section.key = value) """ if not isinstance(arg_parser, argparse.ArgumentParser): raise TypeError("arg_parser must be an ArgumentParser") SectionParser.__init__(self) self._arg_parser = arg_parser self._line_parser = LineParser(key_value_delimiters, comment_seperators, key_delimiters, {}, section_override_delimiters) self.__reset_sections()
def parse_cli(arg_list=None, origin=os.getcwd(), arg_parser=None, key_value_delimiters=('=', ':'), comment_seperators=(), key_delimiters=(',',), section_override_delimiters=(".",)): """ Parses the CLI arguments and creates sections out of it. :param arg_list: The CLI argument list. :param origin: Directory used to interpret relative paths given as argument. :param arg_parser: Instance of ArgParser that is used to parse none-setting arguments. :param key_value_delimiters: Delimiters to separate key and value in setting arguments. :param comment_seperators: Allowed prefixes for comments. :param key_delimiters: Delimiter to separate multiple keys of a setting argument. :param section_override_delimiters: The delimiter to delimit the section from the key name (e.g. the '.' in sect.key = value). :return: A dictionary holding section names as keys and the sections themselves as value. """ # Note: arg_list can also be []. Hence we cannot use # `arg_list = arg_list or default_list` arg_list = sys.argv[1:] if arg_list is None else arg_list arg_parser = arg_parser or default_arg_parser() origin += os.path.sep sections = OrderedDict(default=Section('Default')) line_parser = LineParser(key_value_delimiters, comment_seperators, key_delimiters, {}, section_override_delimiters) for arg_key, arg_value in sorted( vars(arg_parser.parse_args(arg_list)).items()): if arg_key == 'settings' and arg_value is not None: parse_custom_settings(sections, arg_value, origin, line_parser) else: if isinstance(arg_value, list): arg_value = ",".join([str(val) for val in arg_value]) append_to_sections(sections, arg_key, arg_value, origin, from_cli=True) return sections
def __init__(self, key_value_delimiters=('=', ), comment_seperators=('#', ), key_delimiters=(',', ' '), section_name_surroundings=MappingProxyType({"[": "]"}), remove_empty_iter_elements=True): self.line_parser = LineParser(key_value_delimiters, comment_seperators, key_delimiters, section_name_surroundings) self.__remove_empty_iter_elements = remove_empty_iter_elements # Declare it self.sections = None self.__rand_helper = None self.__init_sections()
def __init__(self, key_value_delimiters=['=', ':'], comment_seperators=['#', ';', '//'], key_delimiters=[',', ' '], section_name_surroundings={'[': "]"}): SectionParser.__init__(self) self.line_parser = LineParser(key_value_delimiters, comment_seperators, key_delimiters, section_name_surroundings) # Declare it self.sections = None self.__rand_helper = None self.__init_sections() if sys.version_info < (3, 3): # pragma: no cover self.FileNotFoundError = IOError else: self.FileNotFoundError = FileNotFoundError
def parse_cli(arg_list=None, origin=os.getcwd(), arg_parser=None, args=None, key_value_delimiters=('=', ':'), comment_seperators=(), key_delimiters=(',', ), section_override_delimiters=('.', ), key_value_append_delimiters=('+=', )): """ Parses the CLI arguments and creates sections out of it. :param arg_list: The CLI argument list. :param origin: Directory used to interpret relative paths given as argument. :param arg_parser: Instance of ArgParser that is used to parse none-setting arguments. :param args: Alternative pre-parsed CLI arguments. :param key_value_delimiters: Delimiters to separate key and value in setting arguments where settings are being defined. :param comment_seperators: Allowed prefixes for comments. :param key_delimiters: Delimiter to separate multiple keys of a setting argument. :param section_override_delimiters: The delimiter to delimit the section from the key name (e.g. the '.' in sect.key = value). :param key_value_append_delimiters: Delimiters to separate key and value in setting arguments where settings are being appended. :return: A dictionary holding section names as keys and the sections themselves as value. """ assert not (arg_list and args), ( 'Either call parse_cli() with an arg_list of CLI arguments or ' 'with pre-parsed args, but not with both.') if args is None: arg_parser = default_arg_parser() if arg_parser is None else arg_parser args = arg_parser.parse_args(arg_list) origin += os.path.sep sections = OrderedDict(cli=Section('cli')) line_parser = LineParser(key_value_delimiters, comment_seperators, key_delimiters, {}, section_override_delimiters, key_value_append_delimiters) for arg_key, arg_value in sorted(vars(args).items()): if arg_key == 'settings' and arg_value is not None: parse_custom_settings(sections, arg_value, origin, line_parser) else: if isinstance(arg_value, list): arg_value = ','.join([str(val) for val in arg_value]) append_to_sections(sections, arg_key, arg_value, origin, section_name='cli', from_cli=True) return sections
def setUp(self): self.uut = LineParser(comment_separators=('#', ';'))
def setUp(self): self.uut = LineParser()