forked from Screenly/Anthias
-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.py
113 lines (95 loc) · 3.76 KB
/
settings.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import configparser
import os
from collections import UserDict
from os import path, getenv
CONFIG_DIR = '/home/user/data/'
CONFIG_FILE = 'kenban.conf'
DEFAULTS = {
'main': {
'server_address': 'https://api.kenban.co.uk',
'websocket_updates_address': 'wss://api.kenban.co.uk/ws/v1/updates/screen-schedule/',
'device_uuid': None,
'last_update': None,
'access_token': None,
'refresh_token': None,
'screen_name': None,
},
'api': {
'device_register_uri': '/api/v1/device-pairing/new',
'device_auth_uri': '/api/v1/device-pairing/authorise',
'setup_complete': '/api/v1/device-pairing/setup-complete',
'refresh_access_token_url': '/api/v1/auth/access-token-refresh',
'update_url': '/api/v1/screen/last-update',
'image_url': '/api/v1/image/',
'template_info_url': '/api/v1/template/info/',
'template_raw_url': '/api/v1/template/raw/',
'schedule_url': '/api/v1/schedule/screen/',
'event_url': '/api/v1/event/screen/',
},
'folders': {
'default_templates_folder': '/home/user/data/default_templates/',
'default_images_folder': '/home/user/data/default_images/',
'images_folder': '/home/user/data/user_images/',
'templates_folder': '/home/user/data/user_templates/',
'database': os.path.join(CONFIG_DIR, 'kenban.db'),
},
'viewer': {
'debug_logging': False,
'resolution': '1920x1080',
},
}
CONFIGURABLE_SETTINGS = DEFAULTS['viewer'].copy()
class KenbanSettings(UserDict):
"""Kenban OS's Settings."""
def __init__(self, *args, **kwargs):
UserDict.__init__(self, *args, **kwargs)
self.home = getenv('HOME')
self.conf_file = self.get_configfile()
if not path.isfile(self.conf_file):
self.use_defaults()
self.save()
else:
self.load()
def _get(self, config, section, field, default):
try:
if isinstance(default, bool):
self[field] = config.getboolean(section, field)
elif isinstance(default, int):
self[field] = config.getint(section, field)
else:
self[field] = config.get(section, field)
except configparser.Error as e:
self[field] = default
if field in ['database']:
self[field] = str(path.join(self.home, self[field]))
def _set(self, config, section, field, default):
if isinstance(default, bool):
config.set(section, field, self.get(field, default) and 'on' or 'off')
else:
config.set(section, field, str(self.get(field, default)))
def load(self):
"""Loads the latest settings from kenban.conf into memory."""
config = configparser.ConfigParser(allow_no_value=True)
config.read(self.conf_file)
for section, defaults in DEFAULTS.items():
for field, default in list(defaults.items()):
self._get(config, section, field, default)
def use_defaults(self):
for defaults in DEFAULTS.items():
for field, default in list(defaults[1].items()):
self[field] = default
def save(self):
# Write new settings to disk.
config = configparser.ConfigParser()
for section, defaults in DEFAULTS.items():
config.add_section(section)
for field, default in list(defaults.items()):
self._set(config, section, field, default)
with open(self.conf_file, "w") as f:
config.write(f)
self.load()
def get_configdir(self):
return path.join(self.home, CONFIG_DIR)
def get_configfile(self):
return path.join(self.home, CONFIG_DIR, CONFIG_FILE)
settings = KenbanSettings()