From 55a196c982b28628894909c472a050938328c631 Mon Sep 17 00:00:00 2001 From: RGBCube <78925721+RGBCube@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:21:23 +0300 Subject: [PATCH] pathmagic to rem and staticmethods --- db.py | 80 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/db.py b/db.py index d1de9f5..64e2e34 100644 --- a/db.py +++ b/db.py @@ -4,7 +4,8 @@ import os class Utils: - def validate_json(self, path_to_json): + @staticmethod + def validate_json(path_to_json): if not os.path.isfile(path_to_json): with open(path_to_json, "w") as json_file: json.dump({}, json_file) @@ -13,34 +14,51 @@ class Utils: with open(path_to_json, "w") as json_file: json.dump({}, json_file) - def path_magic_set(self, main_dict: dict, path: str, *, key: str, value): - def magic(alt_dict: dict, key: str): - if key in alt_dict.keys(): - return alt_dict - else: - alt_dict[key] = {} - return alt_dict - main_dict_ref, i = main_dict, 0 - for dict_name in path.split("+"): - i += 1 - main_dict = magic(main_dict, dict_name)[dict_name] - if i == len(path.split("+")): - main_dict[key] = value - return main_dict_ref + class PathMagic: + + @staticmethod + def set(main_dict: dict, path: str, *, key: str, value): + def magic(alt_dict: dict, key: str): + if key in alt_dict.keys(): + return alt_dict + else: + alt_dict[key] = {} + return alt_dict + main_dict_ref, i = main_dict, 0 + for dict_name in path.split("+"): + i += 1 + main_dict = magic(main_dict, dict_name)[dict_name] + if i == len(path.split("+")): + main_dict[key] = value + return main_dict_ref - def path_magic_get(self, main_dict: dict, path: str, *, key, default=None): - for dict_name in path.split("+"): - try: - main_dict = main_dict[dict_name] - except (KeyError, AttributeError): - return default - return main_dict.get(key, default) + @staticmethod + def get(main_dict: dict, path: str, *, key, default=None): + for dict_name in path.split("+"): + try: + main_dict = main_dict[dict_name] + except (KeyError, TypeError, AttributeError): + return default + return main_dict.get(key, default) + + @staticmethod + def rem(main_dict: dict, path: str, *, key): + main_dict_ref, i = main_dict, 0 + for dict_name in path.split("+"): + try: + i += 1 + main_dict = main_dict[dict_name] + if i == len(path.split("+")): + main_dict.pop(key, None) + except (KeyError, TypeError, AttributeError): + return main_dict_ref + return main_dict_ref class JSONx: def __init__(self, path_to_json: str): self.path_to_json = path_to_json - self.utils = Utils() + self.utils = Utils self.utils.validate_json(path_to_json) def set(self, key: str, value, *, pathmagic=""): @@ -52,26 +70,32 @@ class JSONx: json_data[key] = value json.dump(json_data, json_file, indent=4) else: - json.dump(self.utils.path_magic_set(json_data, pathmagic, key=key, value=value), json_file, indent=4) + json.dump(self.utils.PathMagic.set(json_data, pathmagic, key=key, value=value), json_file, indent=4) def get(self, key: str, *, default=None, pathmagic=""): self.utils.validate_json(self.path_to_json) with open(self.path_to_json, mode="r") as json_file: json_data = json.load(json_file) - return json_data.get(key, default) if pathmagic == "" else return self.utils.path_magic_get(json_data, pathmagic, key=key, default=default) + if pathmagic == "": + return json_data.get(key, default) + else: + return self.utils.PathMagic.get(json_data, pathmagic, key=key, default=default) def all(self): self.utils.validate_json(self.path_to_json) with open(self.path_to_json, mode="r") as json_file: return json.load(json_file) - def rem(self, key: str): + def rem(self, key: str, *, pathmagic=""): self.utils.validate_json(self.path_to_json) with open(self.path_to_json, mode="r") as json_file: json_data = json.load(json_file) with open(self.path_to_json, mode="w") as json_file: - json_data.pop(key, None) - json.dump(json_data, json_file, indent=4) + if pathmagic == "": + json_data.pop(key, None) + json.dump(json_data, json_file, indent=4) + else: + json.dump(self.utils.PathMagic.rem(json_data, pathmagic, key=key), json_file, indent=4) def nuke(self): with open(self.path_to_json, mode="w") as json_file: