1
Fork 0
mirror of https://github.com/RGBCube/JsonWrapper synced 2025-07-27 19:57:44 +00:00

pathmagic

This commit is contained in:
RGBCube 2022-01-15 15:20:57 +03:00 committed by GitHub
parent fd3dd63136
commit ee145f449b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

20
db.py
View file

@ -13,6 +13,21 @@ class Utils:
with open(path_to_json, "w") as json_file: with open(path_to_json, "w") as json_file:
json.dump({}, json_file) json.dump({}, json_file)
def path_magic(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
exec_str = "main_dict"
for dict_name in path.split("+"):
exec_str = f"magic({exec_str}, '{dict_name}')['{dict_name}']"
if path.index(dict_name) == len(path) - 1:
exec_str = f"{exec_str}['{key}'] = {value}"
exec(exec_str)
return main_dict
class ClutterDB: class ClutterDB:
def __init__(self, path_to_json: str): def __init__(self, path_to_json: str):
@ -20,13 +35,16 @@ class ClutterDB:
self.utils = Utils() self.utils = Utils()
self.utils.validate_json(path_to_json) self.utils.validate_json(path_to_json)
def set(self, key: str, value): def set(self, key: str, value, *, pathmagic=""):
self.utils.validate_json(self.path_to_json) self.utils.validate_json(self.path_to_json)
with open(self.path_to_json, mode="r") as json_file: with open(self.path_to_json, mode="r") as json_file:
json_data = json.load(json_file) json_data = json.load(json_file)
with open(self.path_to_json, mode="w") as json_file: with open(self.path_to_json, mode="w") as json_file:
if pathmagic == "":
json_data[key] = value json_data[key] = value
json.dump(json_data, json_file, indent=4) json.dump(json_data, json_file, indent=4)
else:
json.dump(self.utils.path_magic(json_data, pathmagic, key=key, value=value), json_file, indent=4)
def get(self, key: str, *, default=None): def get(self, key: str, *, default=None):
self.utils.validate_json(self.path_to_json) self.utils.validate_json(self.path_to_json)