def __init__(self, value, box_settings, unique=False): if unique: self._dynaconf_merge_unique = True self.box_settings = box_settings self.value = parse_conf_data(value, tomlfy=True, box_settings=box_settings) if isinstance(self.value, (int, float, bool)): # @merge 1, @merge 1.1, @merge False self.value = [self.value] elif isinstance(self.value, str): # @merge {"valid": "json"} json_object = list( extract_json_objects( multi_replace( self.value, { ": True": ": true", ":True": ": true", ": False": ": false", ":False": ": false", ": None": ": null", ":None": ": null", }, ))) if len(json_object) == 1: self.value = json_object[0] else: matches = KV_PATTERN.findall(self.value) # a=b, c=d if matches: self.value = { k.strip(): parse_conf_data(v, tomlfy=True, box_settings=box_settings) for k, v in (match.strip().split("=") for match in matches) } elif "," in self.value: # @merge foo,bar self.value = self.value.split(",") else: # @merge foo self.value = [self.value] self.unique = unique
def test_extract_json(): assert list(extract_json_objects("foo bar")) == [] assert list(extract_json_objects('foo bar {"a": 1}')) == [{"a": 1}] assert list(extract_json_objects("foo bar {'a': 2{")) == [] assert list(extract_json_objects('{{{"x": {}}}}')) == [{"x": {}}]