feat: add configuration management with async settings refresh and middleware integration

This commit is contained in:
Lan
2026-02-13 23:45:44 +08:00
parent 88c262a6c3
commit db2c94fd19
3 changed files with 35 additions and 7 deletions
+21
View File
@@ -0,0 +1,21 @@
from apps.base.models import KeyValue
from apps.base.utils import ip_limit
from core.settings import DEFAULT_CONFIG, settings
async def ensure_settings_row() -> None:
await KeyValue.get_or_create(key="settings", defaults={"value": DEFAULT_CONFIG})
def _sync_ip_limits() -> None:
ip_limit["error"].minutes = settings.errorMinute
ip_limit["error"].count = settings.errorCount
ip_limit["upload"].minutes = settings.uploadMinute
ip_limit["upload"].count = settings.uploadCount
async def refresh_settings() -> None:
"""从数据库读取最新配置并应用到运行时。"""
config_record = await KeyValue.filter(key="settings").first()
settings.user_config = config_record.value if config_record and config_record.value else {}
_sync_ip_limits()
+6 -3
View File
@@ -11,15 +11,17 @@ from tortoise.expressions import Q
from apps.base.models import FileCodes, UploadChunk
from apps.base.utils import ip_limit, get_chunk_file_path_name
from core.config import refresh_settings
from core.settings import settings, data_root
from core.storage import FileStorageInterface, storages
from core.utils import get_now
async def delete_expire_files():
file_storage: FileStorageInterface = storages[settings.file_storage]()
while True:
try:
await refresh_settings()
file_storage: FileStorageInterface = storages[settings.file_storage]()
# 遍历 share目录下的所有文件夹,删除空的文件夹,并判断父目录是否为空,如果为空也删除
if settings.file_storage == "local":
for root, dirs, files in os.walk(f"{data_root}/share/data"):
@@ -46,10 +48,11 @@ async def delete_expire_files():
async def clean_incomplete_uploads():
file_storage: FileStorageInterface = storages[settings.file_storage]()
expire_hours = getattr(settings, "chunk_expire_hours", 24)
while True:
try:
await refresh_settings()
file_storage: FileStorageInterface = storages[settings.file_storage]()
expire_hours = getattr(settings, "chunk_expire_hours", 24)
now = await get_now()
expire_time = now - datetime.timedelta(hours=expire_hours)
expired_sessions = await UploadChunk.filter(