clay/settings.py
Andrew Dunai 38f4691a50 Initial
2017-12-28 15:09:40 +02:00

81 lines
2.4 KiB
Python

import os
import yaml
import appdirs
import urwid
class Settings(urwid.Columns):
name = 'Settings'
key = 9
def __init__(self, app):
self.app = app
config = self.__class__.get_config()
self.username = urwid.Edit(
edit_text=config.get('username', '')
)
self.password = urwid.Edit(
mask='*', edit_text=config.get('password', '')
)
self.device_id = urwid.Edit(
edit_text=config.get('device_id', '')
)
return super().__init__([urwid.ListBox(urwid.SimpleListWalker([
urwid.Text('Settings'),
urwid.Divider(' '),
urwid.Text('Username'),
urwid.AttrWrap(self.username, 'input', 'input_focus'),
urwid.Divider(' '),
urwid.Text('Password'),
urwid.AttrWrap(self.password, 'input', 'input_focus'),
urwid.Divider(' '),
urwid.Text('Device ID'),
urwid.AttrWrap(self.device_id, 'input', 'input_focus'),
urwid.Divider(' '),
urwid.AttrWrap(urwid.Button(
'Save', on_press=self.on_save
), 'input', 'input_focus')
]))])
def on_save(self, button):
self.__class__.set_config(dict(
username=self.username.edit_text,
password=self.password.edit_text,
device_id=self.device_id.edit_text
))
self.app.set_page('StartUp')
# self.app.set_page('MyLibrary')
@classmethod
def get_config_filename(cls):
filedir = appdirs.user_config_dir('clay', 'Clay')
os.makedirs(filedir, exist_ok=True)
path = os.path.join(filedir, 'config.json')
if not os.path.exists(path):
with open(path, 'w') as f:
f.write('{}')
return path
@classmethod
def get_config(cls):
with open(cls.get_config_filename(), 'r') as f:
return yaml.load(f.read())
@classmethod
def set_config(cls, new_config):
config = cls.get_config()
config.update(new_config)
with open(cls.get_config_filename(), 'w') as f:
f.write(yaml.dump(config, default_flow_style=False))
@classmethod
def is_config_valid(cls):
config = cls.get_config()
return all([
config.get(x, None)
for x
in ('username', 'password', 'device_id')
])