1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from configparser import DEFAULTSECT
20 from configparser import SafeConfigParser
21
22 from timelinelib.general.observer import Observable
23
24
26
28 Observable.__init__(self)
29 self._config_parser = SafeConfigParser()
30 self._build(item_dicts)
31
32 - def read(self, path):
33 self._config_parser.read(path, encoding="utf-8")
34
36 with open(path, "w", encoding="utf-8") as f:
37 self._config_parser.write(f)
38
40 for item_dict in item_dicts:
41 self._build_item(Item(item_dict))
42
49
50 def setter(value):
51 self._config_parser.set(
52 item.get_section(),
53 item.get_config_name(),
54 item.get_encoder()(value)
55 )
56 self._notify()
57 setattr(self, "get_%s" % item.get_name(), getter)
58 setattr(self, "set_%s" % item.get_name(), setter)
59 setter(item.get_default())
60
61
63
65 self._item_dict = item_dict
66
68 return self._item_dict["name"]
69
71 return self._item_dict.get("config_name", self.get_name())
72
75
77 return self._item_dict["default"]
78
80 return {
81 "text": lambda x: x,
82 "integer": str,
83 "boolean": str,
84 }[self._get_data_type()]
85
87 return {
88 "text": lambda x: x,
89 "integer": int,
90 "boolean": self._string_to_bool,
91 }[self._get_data_type()]
92
94 return self._item_dict.get("data_type", "text")
95
97 return {
98 "true": True,
99 "false": False,
100 }[string.lower()]
101