load_dataclass_json() now automatically adds a save function to the dataclass.

This commit is contained in:
The Wobbler 2024-12-05 16:58:38 +01:00
parent 742199873c
commit 5ed48e4d7c
2 changed files with 17 additions and 3 deletions

View file

@ -113,9 +113,14 @@ class DataclassJSONFile:
# these 2 functions do the exact same thing as the functions in the class above
def load_dataclass_json(dataclass, file_path: str):
def load_dataclass_json(dataclass, file_path: str, builtin_save: bool=True):
"""
Loads a dataclass instance from a json file.
:param dataclass: The dataclass from which the instance will be created.
:param str file_path: The path to the json file from which the data gets loaded.
:param bool builtin_save: If True, you can simply call instance.save(file_path) to store the data.
:return: An instance of the dataclass containing the data from the json file.
"""
if os.path.exists(file_path):
file = open(file_path, "r")
@ -125,15 +130,23 @@ def load_dataclass_json(dataclass, file_path: str):
else:
class_dict = {}
return dataclass(**class_dict)
instance = dataclass(**class_dict)
if builtin_save:
dataclass.save = save_dataclass_json
return instance
def save_dataclass_json(class_instance, file_path: str):
"""
Saves a dataclass instance to a json file.
:param class_instance: The instance of the dataclass to be saved.
:param str file_path: The path to the file in which the data gets written.
"""
class_dict = class_instance.__dict__
class_dict = dict(filter(lambda pair: not callable(pair[1]), class_dict.items()))
class_dict = dict(filter(lambda pair: not callable(pair[1]), class_dict.items())) # filter out functions
file = open(file_path, "w")
json.dump(class_dict, file)

View file

@ -114,6 +114,7 @@ def rsap(old: str, replace: str, position: int):
def find_nth_occurrence(string: str, substring: str, n: int):
"""
Find the nth occurrence of a substring in a string.
:param int n: 0 is the first occurrence
:return: -1 when the substring was not found, 0 is the first character.
"""