39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
|
|
from app.core.models.base import AlchemyBase
|
|
from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime, JSON, Boolean
|
|
|
|
|
|
class ServiceConfigValue(AlchemyBase):
|
|
__tablename__ = 'service_config'
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
key = Column(String(128), nullable=False, unique=True)
|
|
packed_value = Column(JSON, nullable=False, default={})
|
|
|
|
@property
|
|
def value(self):
|
|
return self.packed_value['value']
|
|
|
|
|
|
class ServiceConfig:
|
|
def __init__(self, session):
|
|
self.session = session
|
|
|
|
def get(self, key, default=None):
|
|
result = self.session.query(ServiceConfigValue).filter(ServiceConfigValue.key == key).first()
|
|
return (result.value if result else None) or default
|
|
|
|
def set(self, key, value):
|
|
config_value = self.session.query(ServiceConfigValue).filter(
|
|
ServiceConfigValue.key == key
|
|
).first()
|
|
if not config_value:
|
|
config_value = ServiceConfigValue(key=key)
|
|
self.session.add(config_value)
|
|
self.session.commit()
|
|
return self.set(key, value)
|
|
|
|
config_value.packed_value = {'value': value}
|
|
self.session.commit()
|
|
return
|