MoviePilot/app/db/systemconfigs.py
2023-06-06 07:15:17 +08:00

59 lines
1.7 KiB
Python

import json
from typing import Any, Union
from sqlalchemy.orm import Session
from app.db import SessionLocal
from app.db.models.systemconfig import SystemConfig
from app.utils.object import ObjectUtils
from app.utils.singleton import Singleton
from app.utils.types import SystemConfigKey
class SystemConfigs(metaclass=Singleton):
# 配置对象
__SYSTEMCONF: dict = {}
_db: Session = None
def __init__(self, _db=SessionLocal()):
"""
加载配置到内存
"""
self._db = _db
for item in SystemConfig.list(self._db):
if ObjectUtils.is_obj(item.value):
self.__SYSTEMCONF[item.key] = json.loads(item.value)
else:
self.__SYSTEMCONF[item.key] = item.value
def set(self, key: Union[str, SystemConfigKey], value: Any):
"""
设置系统设置
"""
if isinstance(key, SystemConfigKey):
key = key.value
# 更新内存
self.__SYSTEMCONF[key] = value
# 写入数据库
if ObjectUtils.is_obj(value):
if value is not None:
value = json.dumps(value)
else:
value = ''
conf = SystemConfig.get_by_key(self._db, key)
if conf:
conf.update(self._db, {"value": value})
else:
conf = SystemConfig(key=key, value=value)
conf.create(self._db)
def get(self, key: Union[str, SystemConfigKey] = None):
"""
获取系统设置
"""
if isinstance(key, SystemConfigKey):
key = key.value
if not key:
return self.__SYSTEMCONF
return self.__SYSTEMCONF.get(key)