fix Config reload

This commit is contained in:
jxxghp
2025-06-04 07:17:47 +08:00
parent 2af8b6f445
commit 0911854e9d
4 changed files with 56 additions and 67 deletions
+16 -43
View File
@@ -1,10 +1,9 @@
from typing import Any, Union
from typing import Any, Union, Optional
from app.db import DbOper
from app.db.models.systemconfig import SystemConfig
from app.schemas.types import SystemConfigKey, EventType
from app.schemas.types import SystemConfigKey
from app.utils.singleton import Singleton
from app.schemas import ConfigChangeEventData
class SystemConfigOper(DbOper, metaclass=Singleton):
@@ -19,9 +18,12 @@ class SystemConfigOper(DbOper, metaclass=Singleton):
for item in SystemConfig.list(self._db):
self.__SYSTEMCONF[item.key] = item.value
def set(self, key: Union[str, SystemConfigKey], value: Any):
def set(self, key: Union[str, SystemConfigKey], value: Any) -> Optional[bool]:
"""
设置系统设置
:param key: 配置键
:param value: 配置值
:return: 是否设置成功(True 成功/False 失败/None 无需更新)
"""
if isinstance(key, SystemConfigKey):
key = key.value
@@ -31,38 +33,17 @@ class SystemConfigOper(DbOper, metaclass=Singleton):
self.__SYSTEMCONF[key] = value
conf = SystemConfig.get_by_key(self._db, key)
if conf:
if value:
conf.update(self._db, {"value": value})
# 发送配置变更通知
if old_value != value:
from app.core.event import eventmanager
eventmanager.send_event(etype=EventType.ConfigChanged, data=ConfigChangeEventData(
key=key,
old_value=old_value,
new_value=value,
change_type="update"
))
else:
conf.delete(self._db, conf.id)
# 发送配置删除通知
from app.core.event import eventmanager
eventmanager.send_event(etype=EventType.ConfigChanged, data=ConfigChangeEventData(
key=key,
old_value=old_value,
new_value=value,
change_type="delete"
))
if old_value != value:
if value:
conf.update(self._db, {"value": value})
else:
conf.delete(self._db, conf.id)
return True
return None
else:
conf = SystemConfig(key=key, value=value)
conf.create(self._db)
# 发送配置变更通知
from app.core.event import eventmanager
eventmanager.send_event(etype=EventType.ConfigChanged, data=ConfigChangeEventData(
key=key,
old_value=old_value,
new_value=value,
change_type="add"
))
return True
def get(self, key: Union[str, SystemConfigKey] = None) -> Any:
"""
@@ -80,26 +61,18 @@ class SystemConfigOper(DbOper, metaclass=Singleton):
"""
return self.__SYSTEMCONF or {}
def delete(self, key: Union[str, SystemConfigKey]):
def delete(self, key: Union[str, SystemConfigKey]) -> bool:
"""
删除系统设置
"""
if isinstance(key, SystemConfigKey):
key = key.value
# 更新内存
old_value = self.__SYSTEMCONF.pop(key, None)
self.__SYSTEMCONF.pop(key, None)
# 写入数据库
conf = SystemConfig.get_by_key(self._db, key)
if conf:
conf.delete(self._db, conf.id)
# 发送配置变更通知
from app.core.event import eventmanager
eventmanager.send_event(etype=EventType.ConfigChanged, data=ConfigChangeEventData(
key=key,
old_value=old_value,
new_value=None,
change_type="delete"
))
return True
def __del__(self):