From 8da4abc2c5858a4cacc75891ed2c868b32e6f09c Mon Sep 17 00:00:00 2001 From: Florian Ludwig Date: Sat, 31 Jul 2021 20:24:09 +0200 Subject: [PATCH] allow interacting with key value pairs via subscription --- json5/model.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/json5/model.py b/json5/model.py index bf47dcd..63f1ef2 100644 --- a/json5/model.py +++ b/json5/model.py @@ -46,6 +46,28 @@ def __init__(self, *key_value_pairs, trailing_comma=None, leading_wsc=None, tok= assert leading_wsc is None or all(isinstance(item, str) or isinstance(item, Comment) for item in leading_wsc) super().__init__(key_value_pairs=key_value_pairs, trailing_comma=trailing_comma, leading_wsc=leading_wsc or [], tok=tok) + def find_key_value_pair(self, key): + for key_value_pair in self.key_value_pairs: + compare_key = key_value_pair.key + if isinstance(compare_key, String): + if compare_key.characters == key: + return key_value_pair + elif isinstance(compare_key, Identifier): + if compare_key.name == key: + return key_value_pair + else: + raise NotImplementedError(f"node type not handled as object key: {compare_key}") + raise KeyError(key) + + def __getitem__(self, key: Key) -> Value: + return self.find_key_value_pair(key).value + + def __setitem__(self, key: Key, value: Value): + try: + self.find_key_value_pair(key).value = value + except KeyError: + self.key_value_pairs.append(KeyValuePair(KeyValuePair(key, value))) + class JSONArray(Value): def __init__(self, *values, trailing_comma=None, leading_wsc=None, tok=None):