48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from enum import Enum
|
|
from app import db
|
|
|
|
class Setting(db.Model):
|
|
|
|
class Keys(Enum):
|
|
HASSCALL_USERNAME = "username"
|
|
HASSCALL_PASSWORD = "password"
|
|
HASSCALL_LOGIN_REQUIRED = "login_required"
|
|
|
|
HASS_URL = "hass_url"
|
|
HASS_TOKEN = "hass_token"
|
|
FEEDBACK = "feedback_level"
|
|
|
|
# Table structure
|
|
__tablename__ = "settings"
|
|
|
|
key = db.Column(db.String(64), primary_key=True )
|
|
value = db.Column(db.String(256) )
|
|
|
|
def __init__(self, key:Keys, value:str) -> None:
|
|
self.key = key.value
|
|
self.value = value
|
|
|
|
def __repr__(self) -> str:
|
|
return str(self.key) + ' = ' + str(self.value)
|
|
|
|
@classmethod
|
|
def get_entry_or_default(cls, key:Keys, default:str) -> str:
|
|
result = cls.query.filter_by(key=key.value).first()
|
|
if result is not None:
|
|
return result
|
|
|
|
result = Setting(key, default)
|
|
db.session.add (result)
|
|
db.session.commit( )
|
|
return result
|
|
|
|
@classmethod
|
|
def get_value(cls, key:Keys, default:str = "") -> str:
|
|
return cls.get_entry_or_default(key, default).value
|
|
|
|
@classmethod
|
|
def set_value(cls, key:Keys, value:str) -> None:
|
|
setting = cls.get_entry_or_default(key, value)
|
|
setting.value = value
|
|
db.session.commit( )
|