-
Notifications
You must be signed in to change notification settings - Fork 0
/
conf.py
91 lines (71 loc) · 2.15 KB
/
conf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from pathlib import Path
import json
class Conf:
_directory = Path.home().joinpath('.svsoft')
_name = 'budgeton.cfg'
def __init__(self, directory=None, name=None):
self._f = None
if name is not None:
self._name = name
# init directory path
if directory is not None:
self._directory = directory
self.init_directory()
self.init_file()
self.read_conf()
def init_directory(self):
if self._directory.exists() is False:
self._directory.mkdir()
def open_file(self):
"""Open file and return if created"""
created = False
if self._f is not None and self._f.closed is False:
pass
try:
# open for read
self._f = open(
self._directory.joinpath(self._name),
'r+',
encoding='utf-8')
except FileNotFoundError:
# create if not exist
self._f = open(
self._directory.joinpath(self._name),
'w',
encoding='utf-8')
created = True
finally:
if created:
self._f.close()
self._f = open(
self._directory.joinpath(self._name),
'r+',
encoding='utf-8')
return created
def init_file(self):
if self.open_file():
self._conf = {
"last_opened": False,
}
self.save()
self._f.close()
def save(self):
self.open_file()
conf_dumped = json.dumps(self._conf)
self._f.write(conf_dumped)
self._f.close()
def read_conf(self):
self.open_file()
content = self._f.read()
self._conf = json.loads(content)
self._f.close()
def get(self, key):
"""return key if present in self._conf also return None"""
try:
return self._conf[key]
except KeyError:
return None
def set(self, key, value):
"""set key in conf and write on file"""
self._conf[key] = value
self.save()