Files
MoviePilot/app/api/dependencies/workflow.py
jxxghp 6d4ce83837 fix(types): clear host mypy debt and prevent typing regressions
严格检查全部宿主源码,清零类型错误预算并移除按模块类型豁免。
按原因、所属方法、错误码及语法指纹锁定必要兼容例外和站点类型桩,
CI 阻断新增忽略、检查范围退化、本地桩替代真实接口及新的类型错误。

修复空值、异步和供应方类型边界,保持插件与 API 兼容合同,
并补充存储、订阅、通知、Agent 和工作流边界的回归覆盖。
2026-10-21 22:03:18 +08:00

82 lines
2.8 KiB
Python

"""
工作流领域的请求级 command/query 依赖。
"""
from typing import cast
from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import Session
from app.adapters.external.server import MoviePilotServerHelper
from app.api.context import get_async_session, get_host_runtime, get_sync_session
from app.application.scheduling import get_scheduler
from app.application.workflow import (
AsyncWorkflowDefinitionRepository,
UnitOfWork,
WorkflowDefinitionCommand,
WorkflowMutationCommand,
WorkflowMutationRepository,
WorkflowQueryService,
get_workflow_manager,
)
from app.runtime.stop import runtime_stop_state
from app.startup.composition.context import HostRuntime
def get_workflow_mutation_command(
db: Session = Depends(get_sync_session),
runtime: HostRuntime = Depends(get_host_runtime),
) -> WorkflowMutationCommand:
"""
组装请求级工作流写用例和提交后的调度副作用。
"""
scheduler = get_scheduler()
workflow_manager = get_workflow_manager()
system_config = runtime.workflow.system_config()
return WorkflowMutationCommand(
repository=cast(
WorkflowMutationRepository, runtime.workflow.repository(db)
),
unit_of_work=cast(UnitOfWork, runtime.persistence.sync_transaction(db)),
add_timer=scheduler.update_workflow_job,
remove_timer=scheduler.remove_workflow_job,
load_event=workflow_manager.load_workflow_events,
remove_event=workflow_manager.remove_workflow_event,
refresh_event=workflow_manager.update_workflow_event,
stop_running=runtime_stop_state.stop_workflow,
delete_cache=lambda workflow_id: system_config.delete(
f"WorkflowCache-{workflow_id}"
),
)
def get_workflow_definition_command(
db: AsyncSession = Depends(get_async_session),
runtime: HostRuntime = Depends(get_host_runtime),
) -> WorkflowDefinitionCommand:
"""
组装工作流创建、复用和重置的异步写用例。
"""
system_config = runtime.workflow.system_config()
return WorkflowDefinitionCommand(
repository=cast(
AsyncWorkflowDefinitionRepository, runtime.workflow.repository(db)
),
unit_of_work=runtime.persistence.async_transaction(db),
stop_running=runtime_stop_state.stop_workflow,
async_delete_cache=lambda workflow_id: system_config.async_delete(
f"WorkflowCache-{workflow_id}"
),
report_fork=MoviePilotServerHelper.async_workflow_fork_by_id,
)
def get_workflow_query_service(
runtime: HostRuntime = Depends(get_host_runtime),
) -> WorkflowQueryService:
"""
返回组合根装配的工作流只读查询用例。
"""
return runtime.workflow.query