uploader-bot/app/core/models/_config.py

37 lines
1.2 KiB
Python

from app.core.models.base import AlchemyBase
from sqlalchemy import Column, Integer, String, JSON, select
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
async def get(self, key, default=None):
result = (await self.session.execute(select(ServiceConfigValue).where(ServiceConfigValue.key == key))).scalars().first()
return (result.value if result else None) or default
async def set(self, key, value):
result = (await self.session.execute(select(ServiceConfigValue).where(ServiceConfigValue.key == key))).scalars().first()
if not result:
result = ServiceConfigValue(key=key)
self.session.add(result)
await self.session.commit()
return await self.set(key, value)
result.packed_value = {'value': value}
await self.session.commit()
return