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