Merge remote-tracking branch 'origin/develop' into fix/develop-ruff-f401

This commit is contained in:
2026-07-24 00:16:27 +08:00
23 changed files with 966 additions and 569 deletions
+13 -52
View File
@@ -1,61 +1,22 @@
"""Worker 服务配置 — 继承 SharedSettings,只追加 Worker 特有字段。
"""Worker 服务配置(向后兼容层)。
通用配置(DB/Redis/Celery/OSS/CosyVoice/Doubao 等)统一在
packages/shared/config.py 的 SharedSettings 中定义,这里不重复。
统一配置已迁移到 packages.config.worker_settings。
新代码请使用:
from packages.config import WorkerSettings, get_worker_settings
"""
import os
from typing import Optional
from pydantic_settings import SettingsConfigDict
from packages.shared.config import SharedSettings
from packages.config import WorkerSettings, get_worker_settings, reload_settings_cache
class WorkerSettings(SharedSettings):
"""Worker 服务专用配置。
通用配置继承自 SharedSettings,这里只定义 Worker 独有字段。
Celery broker/backend 使用继承的 celery_broker_url / celery_result_backend;
历史上 Worker 使用 broker_url / result_backend 字段名,通过 property 别名兼容。
"""
# ── Worker 特有 ────────────────────────────────────────────────────
worker_name: str = "xiaoxia-saas-worker"
worker_concurrency: int = 4
worker_max_tasks_per_child: int = 1000
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=False,
extra="ignore",
)
# ── 向后兼容:Celery 字段名别名 ──────────────────────────────────
@property
def broker_url(self) -> str:
return self.celery_broker_url
@property
def result_backend(self) -> str:
return self.celery_result_backend
def get_settings() -> WorkerSettings:
"""获取 Worker 配置单例(向后兼容)。"""
return get_worker_settings()
_settings: Optional["WorkerSettings"] = None
def reload_settings() -> WorkerSettings:
"""重新加载配置(测试用)。"""
reload_settings_cache()
return get_worker_settings()
def get_settings() -> "WorkerSettings":
"""获取 Worker 配置单例。
优先读取 APP_ENV 指定的环境文件(.env.{env}),不存在则读 .env。
"""
global _settings
if _settings is None:
env = os.getenv("APP_ENV", "development")
env_file = f".env.{env}" if env != "development" else ".env"
if os.path.exists(env_file):
_settings = WorkerSettings(_env_file=env_file)
else:
_settings = WorkerSettings()
return _settings
__all__ = ["WorkerSettings", "get_settings", "reload_settings"]