| """ | |
| 依赖注入模块 | |
| 提供 FastAPI 依赖注入函数,用于获取服务和适配器实例 | |
| """ | |
| from functools import lru_cache | |
| from typing import Generator | |
| from ..services.task_service import TaskService | |
| from ..services.experiment_service import ExperimentService | |
| from ..services.file_service import FileService | |
| # ============================================================ | |
| # 服务依赖 | |
| # ============================================================ | |
| def get_task_service() -> TaskService: | |
| """ | |
| 获取 TaskService 实例 | |
| 使用 lru_cache 确保单例 | |
| Returns: | |
| TaskService 实例 | |
| Example: | |
| >>> @router.post("/tasks") | |
| ... async def create_task( | |
| ... request: QuickModeRequest, | |
| ... service: TaskService = Depends(get_task_service) | |
| ... ): | |
| ... return await service.create_quick_task(request) | |
| """ | |
| return TaskService() | |
| def get_experiment_service() -> ExperimentService: | |
| """ | |
| 获取 ExperimentService 实例 | |
| Returns: | |
| ExperimentService 实例 | |
| """ | |
| return ExperimentService() | |
| def get_file_service() -> FileService: | |
| """ | |
| 获取 FileService 实例 | |
| Returns: | |
| FileService 实例 | |
| """ | |
| return FileService() | |
| # ============================================================ | |
| # 通用依赖 | |
| # ============================================================ | |
| async def get_pagination_params( | |
| limit: int = 50, | |
| offset: int = 0 | |
| ) -> dict: | |
| """ | |
| 分页参数依赖 | |
| Args: | |
| limit: 每页数量,默认 50,最大 100 | |
| offset: 偏移量,默认 0 | |
| Returns: | |
| 分页参数字典 | |
| """ | |
| # 限制最大值 | |
| if limit > 100: | |
| limit = 100 | |
| if limit < 1: | |
| limit = 1 | |
| if offset < 0: | |
| offset = 0 | |
| return {"limit": limit, "offset": offset} | |
| __all__ = [ | |
| "get_task_service", | |
| "get_experiment_service", | |
| "get_file_service", | |
| "get_pagination_params", | |
| ] | |