mirror of
https://github.com/ZhuLinsen/daily_stock_analysis
synced 2026-09-20 10:53:33 +08:00
* feat: support runtime multi-time scheduling * fix(review-feedback-1731): 修复 and add the missing workers value here, likely None to preserve the * fix: refine scheduler settings UI * fix: compact scheduler time inputs * fix(review-feedback-1731): Refresh scheduler status after saving changes * fix(review-feedback-1731): Refresh scheduler status after env imports * fix(review-feedback-1731): Do not mark swallowed analysis failures as success * fix: align serve scheduler ownership * fix: preserve runtime scheduler startup semantics * fix: ignore immediate run when cli owns schedule * fix(review-feedback-1731): main.py + api/app.py:--serve-only 下虽然 runtime schedule requested 被置为 * fix(review-feedback-1731): apps/dsa-desktop/main.js / main.py / api/app.py / src/services/runtime * fix: preserve runtime scheduler ownership semantics * fix(review-feedback-1731): 修正 Desktop 启动会自动分析/调度,以及 Web 调度开关在 runtime 状态与持久配置不一致时无法触发 reconcile 的问题 * fix: remove duplicate scheduler save diff variable * fix: allow empty schedule times config * fix: reject busy scheduler run-now requests * fix(review-feedback-1731): 确认并修正 runtime scheduler 重建时可能重复注册 AGENT EVENT MONITOR ENABLED 后台任务的问题 * fix: keep runtime event monitor idempotent * fix: preserve runtime scheduler CLI flags * fix(review-feedback-1731): preserve schedule CLI flags in runtime runs * fix(review-feedback-1731): 修正 --serve --schedule / --serve + SCHEDULE ENABLED=true 下 API * fix(review-feedback-1731): 修复当前 diff 引入的运行时并发风险和 Uvicorn 兼容风险
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
===================================
|
|
API 依赖注入模块
|
|
===================================
|
|
|
|
职责:
|
|
1. 提供数据库 Session 依赖
|
|
2. 提供配置依赖
|
|
3. 提供服务层依赖
|
|
"""
|
|
|
|
from typing import Generator
|
|
|
|
from fastapi import Request
|
|
from sqlalchemy.orm import Session
|
|
|
|
from src.storage import DatabaseManager
|
|
from src.config import get_config, Config
|
|
from src.services.system_config_service import SystemConfigService
|
|
from src.services.runtime_scheduler import RuntimeSchedulerService
|
|
|
|
|
|
def get_db() -> Generator[Session, None, None]:
|
|
"""
|
|
获取数据库 Session 依赖
|
|
|
|
使用 FastAPI 依赖注入机制,确保请求结束后自动关闭 Session
|
|
|
|
Yields:
|
|
Session: SQLAlchemy Session 对象
|
|
|
|
Example:
|
|
@router.get("/items")
|
|
async def get_items(db: Session = Depends(get_db)):
|
|
...
|
|
"""
|
|
db_manager = DatabaseManager.get_instance()
|
|
session = db_manager.get_session()
|
|
try:
|
|
yield session
|
|
finally:
|
|
session.close()
|
|
|
|
|
|
def get_config_dep() -> Config:
|
|
"""
|
|
获取配置依赖
|
|
|
|
Returns:
|
|
Config: 配置单例对象
|
|
"""
|
|
return get_config()
|
|
|
|
|
|
def get_database_manager() -> DatabaseManager:
|
|
"""
|
|
获取数据库管理器依赖
|
|
|
|
Returns:
|
|
DatabaseManager: 数据库管理器单例对象
|
|
"""
|
|
return DatabaseManager.get_instance()
|
|
|
|
|
|
def get_system_config_service(request: Request) -> SystemConfigService:
|
|
"""Get app-lifecycle shared SystemConfigService instance."""
|
|
service = getattr(request.app.state, "system_config_service", None)
|
|
if service is None:
|
|
service = SystemConfigService()
|
|
request.app.state.system_config_service = service
|
|
return service
|
|
|
|
|
|
def get_runtime_scheduler_service(request: Request) -> RuntimeSchedulerService:
|
|
"""Get app-lifecycle shared RuntimeSchedulerService instance."""
|
|
service = getattr(request.app.state, "runtime_scheduler_service", None)
|
|
if service is None:
|
|
service = RuntimeSchedulerService()
|
|
request.app.state.runtime_scheduler_service = service
|
|
return service
|