def test_config_list(self): config_tree = ConfigTree() config_tree.put("a.b.c", [4, 5]) assert config_tree.get("a.b.c") == [4, 5] config_tree.put("a.b.c", [6, 7]) assert config_tree.get("a.b.c") == [6, 7] config_tree.put("a.b.c", [8, 9], True) assert config_tree.get("a.b.c") == [6, 7, 8, 9]
def test_plain_ordered_dict(self): config_tree = ConfigTree() config_tree.put('"a.b"', 5) config_tree.put('a."b.c"', [ConfigTree(), 2]) config_tree.get('a."b.c"')[0].put('"c.d"', 1) d = OrderedDict() d['a.b'] = 5 d['a'] = OrderedDict() d['a']['b.c'] = [OrderedDict(), 2] d['a']['b.c'][0]['c.d'] = 1 assert config_tree.as_plain_ordered_dict() == d
def test_getters(self): config_tree = ConfigTree() config_tree.put("int", 5) assert config_tree["int"] == 5 assert config_tree.get("int") == 5 assert config_tree.get_int("int") == 5 config_tree.put("float", 4.5) assert config_tree["float"] == 4.5 assert config_tree.get("float") == 4.5 assert config_tree.get_float("float") == 4.5 config_tree.put("string", "string") assert config_tree["string"] == "string" assert config_tree.get("string") == "string" assert config_tree.get_string("string") == "string" config_tree.put("list", [1, 2, 3]) assert config_tree["list"] == [1, 2, 3] assert config_tree.get("list") == [1, 2, 3] assert config_tree.get_list("list") == [1, 2, 3] config_tree.put("bool", True) assert config_tree["bool"] is True assert config_tree.get("bool") is True assert config_tree.get_bool("bool") is True config_tree.put("config", {'a': 5}) assert config_tree["config"] == {'a': 5} assert config_tree.get("config") == {'a': 5} assert config_tree.get_config("config") == {'a': 5}
def postParse(self, instring, loc, token_list): """Create ConfigTree from tokens :param instring: :param loc: :param token_list: :return: """ config_tree = ConfigTree(root=self.root) for element in token_list: expanded_tokens = element.tokens if isinstance(element, ConfigInclude) else [element] for tokens in expanded_tokens: # key, value1 (optional), ... key = tokens[0].strip() operator = '=' if len(tokens) == 3 and tokens[1].strip() in [':', '=', '+=']: operator = tokens[1].strip() values = tokens[2:] elif len(tokens) == 2: values = tokens[1:] else: raise ParseSyntaxException("Unknown tokens {tokens} received".format(tokens=tokens)) # empty string if len(values) == 0: config_tree.put(key, '') else: value = values[0] if isinstance(value, list) and operator == "+=": value = ConfigValues([ConfigSubstitution(key, True, '', False, loc), value], False, loc) config_tree.put(key, value, False) elif isinstance(value, unicode) and operator == "+=": value = ConfigValues([ConfigSubstitution(key, True, '', True, loc), ' ' + value], True, loc) config_tree.put(key, value, False) elif isinstance(value, list): config_tree.put(key, value, False) else: existing_value = config_tree.get(key, None) if isinstance(value, ConfigTree) and not isinstance(existing_value, list): # Only Tree has to be merged with tree config_tree.put(key, value, True) elif isinstance(value, ConfigValues): conf_value = value value.parent = config_tree value.key = key if isinstance(existing_value, list) or isinstance(existing_value, ConfigTree): config_tree.put(key, conf_value, True) else: config_tree.put(key, conf_value, False) else: config_tree.put(key, value, False) return config_tree
def test_config_tree_quoted_string(self): config_tree = ConfigTree() config_tree.put("a.b.c", "value") assert config_tree.get("a.b.c") == "value" with pytest.raises(ConfigMissingException): assert config_tree.get("a.b.d") with pytest.raises(ConfigMissingException): config_tree.get("a.d.e") with pytest.raises(ConfigWrongTypeException): config_tree.get("a.b.c.e")
def postParse(self, instring, loc, token_list): """Create ConfigTree from tokens :param instring: :param loc: :param token_list: :return: """ config_tree = ConfigTree() for element in token_list: expanded_tokens = element.tokens if isinstance( element, ConfigInclude) else [element] for tokens in expanded_tokens: # key, value1 (optional), ... key = tokens[0].strip() values = tokens[1:] # empty string if len(values) == 0: config_tree.put(key, '') else: value = values[0] if isinstance(value, list): config_tree.put(key, value, False) else: if isinstance(value, ConfigTree): config_tree.put(key, value, True) elif isinstance(value, ConfigValues): conf_value = value value.parent = config_tree value.key = key existing_value = config_tree.get(key, None) if isinstance(existing_value, list) or isinstance( existing_value, ConfigTree): config_tree.put(key, conf_value, True) else: config_tree.put(key, conf_value, False) else: conf_value = value config_tree.put(key, conf_value, False) return config_tree
def postParse(self, instring, loc, token_list): """Create ConfigTree from tokens :param instring: :param loc: :param token_list: :return: """ config_tree = ConfigTree() for element in token_list: expanded_tokens = element.tokens if isinstance(element, ConfigInclude) else [element] for tokens in expanded_tokens: # key, value1 (optional), ... key = tokens[0].strip() values = tokens[1:] # empty string if len(values) == 0: config_tree.put(key, '') else: value = values[0] if isinstance(value, list): config_tree.put(key, value, False) else: if isinstance(value, ConfigTree): config_tree.put(key, value, True) elif isinstance(value, ConfigValues): conf_value = value value.parent = config_tree value.key = key existing_value = config_tree.get(key, None) if isinstance(existing_value, list) or isinstance(existing_value, ConfigTree): config_tree.put(key, conf_value, True) else: config_tree.put(key, conf_value, False) else: conf_value = value config_tree.put(key, conf_value, False) return config_tree
def test_config_tree_number(self): config_tree = ConfigTree() config_tree.put("a.b.c", 5) assert config_tree.get("a.b.c") == 5
def test_config_tree_null(self): config_tree = ConfigTree() config_tree.put("a.b.c", None) assert config_tree.get("a.b.c") is None
def test_config_tree_number(self): config_tree = ConfigTree() config_tree.put("a.b.c", 5) config_tree.put("a.b.e", 4.5) assert config_tree.get("a.b.c") == 5 assert config_tree.get("a.b.e") == 4.5
def test_getters_with_default(self): config_tree = ConfigTree() config_tree.put("int", 5) assert config_tree.get("int-new", 1) == 1 assert config_tree.get_int("int", 1) == 5 assert config_tree.get_int("int-new", 1) == 1 assert config_tree.get_int("int-new.test", 1) == 1 config_tree.put("float", 4.5) assert config_tree.get("float", 1.0) == 4.5 assert config_tree.get("float-new", 1.0) == 1.0 assert config_tree.get_float("float", 1.0) == 4.5 assert config_tree.get_float("float-new", 1.0) == 1.0 assert config_tree.get_float("float-new.test", 1.0) == 1.0 config_tree.put("string", "string") assert config_tree.get("string", "default") == "string" assert config_tree.get("string-new", "default") == "default" assert config_tree.get_string("string", "default") == "string" assert config_tree.get_string("string-new", "default") == "default" assert config_tree.get_string("string-new.test", "default") == "default" config_tree.put("list", [1, 2, 3]) assert config_tree.get("list", [4]) == [1, 2, 3] assert config_tree.get("list-new", [4]) == [4] assert config_tree.get_list("list", [4]) == [1, 2, 3] assert config_tree.get_list("list-new", [4]) == [4] config_tree.put("bool", True) assert config_tree.get("bool", False) is True assert config_tree.get("bool-new", False) is False assert config_tree.get_bool("bool", False) is True assert config_tree.get_bool("bool-new", False) is False config_tree.put("config", {'a': 5}) assert config_tree.get("config", {'b': 1}) == {'a': 5} assert config_tree.get("config-new", {'b': 1}) == {'b': 1} assert config_tree.get_config("config", {'b': 1}) == {'a': 5} assert config_tree.get_config("config-new", {'b': 1}) == {'b': 1}