from json import load, dump from os.path import exists from pycs.observable import ObservableDict class ApplicationStatus(ObservableDict): def __init__(self, path_to_settings_json=None, settings=None): # load settings if file exists self.__path_to_settings_json = path_to_settings_json if settings is not None: settings = settings elif path_to_settings_json is not None and exists(path_to_settings_json): with open(path_to_settings_json, 'r') as settings_json: settings = load(settings_json) else: settings = {} # initialize data structure super().__init__({ 'settings': settings, 'models': {}, 'projects': {} }) # subscribe to settings change to write it to file self['settings'].subscribe(self.__write_settings_to_file) def __write_settings_to_file(self, settings, keys): with open(self.__path_to_settings_json, 'w') as settings_json: dump(settings, settings_json, indent=4)