MCPcopy
hub / github.com/wechaty/python-wechaty / WechatySetting

Class WechatySetting

src/wechaty/utils/data_util.py:56–110  ·  view source on GitHub ↗

save setting into file when changed

Source from the content-addressed store, hash-verified

54
55
56class WechatySetting(UserDict):
57 """save setting into file when changed"""
58 def __init__(
59 self,
60 setting_file: str
61 ):
62 """init wechaty setting"""
63 super().__init__()
64 self.setting_file = setting_file
65 self._init_setting()
66 self.data = self.read_setting()
67
68 def _init_setting(self):
69 """init setting file"""
70 # 1. init setting dir
71 setting_dir = os.path.dirname(self.setting_file).strip()
72 if setting_dir:
73 os.makedirs(setting_dir, exist_ok=True)
74
75 # 2. init setting file
76 if not os.path.exists(self.setting_file):
77 self.save_setting({})
78
79 # 3. check the content of setting file
80 else:
81 with open(self.setting_file, 'r', encoding='utf-8') as f:
82 content = f.read().strip()
83
84 if not content:
85 self.save_setting({})
86
87 def read_setting(self) -> dict:
88 """read the setting from file
89
90 Returns:
91 dict: the data of setting file
92 """
93 with open(self.setting_file, 'r', encoding='utf-8') as f:
94 data = json.load(f)
95 return data
96
97 def save_setting(self, value: dict) -> None:
98 """update the plugin setting"""
99 with open(self.setting_file, 'w', encoding='utf-8') as f:
100 json.dump(value, f, ensure_ascii=False)
101 self.data = value
102
103 def __setitem__(self, key: str, value: Any) -> None:
104 """triggered by `data[key] = value`"""
105 self.data[key] = value
106 self.save_setting(self.data)
107
108 def to_dict(self) -> dict:
109 """return the dict data"""
110 return self.read_setting()
111
112
113# class QCloudSetting(WechatySetting):

Callers 3

__init__Method · 0.90
test_simple_initMethod · 0.90
test_sub_settingMethod · 0.90

Calls

no outgoing calls

Tested by 2

test_simple_initMethod · 0.72
test_sub_settingMethod · 0.72