diff --git a/apps/api/app/schemas/viral_video.py b/apps/api/app/schemas/viral_video.py index 85fb13074..1d16bf1fb 100755 --- a/apps/api/app/schemas/viral_video.py +++ b/apps/api/app/schemas/viral_video.py @@ -6,7 +6,6 @@ from datetime import datetime from pydantic import BaseModel, Field, field_validator - # ── 枚举常量 ───────────────────────────────────────────────────────────── VALID_FUSION_LEVELS = ("ai_full", "ai_polish", "user_primary") diff --git a/apps/worker/worker_app/tasks/viral_video.py b/apps/worker/worker_app/tasks/viral_video.py index 7437d20ad..a904e0fd3 100755 --- a/apps/worker/worker_app/tasks/viral_video.py +++ b/apps/worker/worker_app/tasks/viral_video.py @@ -19,9 +19,9 @@ from __future__ import annotations import logging import os -from celery import Task +from celery import Task, shared_task from celery.exceptions import Retry -from worker_app.celery_app import celery_app +from worker_app.celery_app import celery_app # noqa: F401 - 加载 app 以注册任务 from worker_app.db import SessionLocal from packages.adapters.sqlalchemy_impl.viral_video_repository import ( @@ -313,8 +313,8 @@ def _step_bgm_select(job: ViralVideoJob) -> str: def _step_render(job: ViralVideoJob, storyboard: list[dict], audio_url: str, bgm: str) -> str: """步骤 8: UnifiedRenderService 渲染。""" try: - from video_processing.unified_render_service import UnifiedRenderService from video_processing.render_adapter import build_render_plan + from video_processing.unified_render_service import UnifiedRenderService render_plan = build_render_plan( images=job.images, @@ -379,7 +379,7 @@ def _step_upload(job: ViralVideoJob, video_path: str) -> str: # ── 主编排器 ──────────────────────────────────────────────────────────── -@celery_app.task(bind=True, max_retries=2, name="worker.run_viral_video_pipeline") +@shared_task(bind=True, max_retries=2, name="worker.run_viral_video_pipeline") def run_viral_video_pipeline(self: Task, job_id: str) -> dict: """爆款视频 10 步流水线编排器。""" session = None @@ -452,7 +452,7 @@ def run_viral_video_pipeline(self: Task, job_id: str) -> dict: session.close() -@celery_app.task(bind=True, max_retries=2, name="worker.resume_viral_video_pipeline") +@shared_task(bind=True, max_retries=2, name="worker.resume_viral_video_pipeline") def resume_viral_video_pipeline(self: Task, job_id: str) -> dict: """用户确认意图后,从断点恢复流水线(步骤 3-10)。""" session = None @@ -539,7 +539,7 @@ def resume_viral_video_pipeline(self: Task, job_id: str) -> dict: session.close() -@celery_app.task(bind=True, max_retries=1, name="worker.run_video_style_analysis") +@shared_task(bind=True, max_retries=1, name="worker.run_video_style_analysis") def run_video_style_analysis(self: Task, job_id: str) -> dict: """独立的视频风格分析任务(v1.3)。""" session = None diff --git a/packages/adapters/sqlalchemy_impl/viral_video_repository.py b/packages/adapters/sqlalchemy_impl/viral_video_repository.py index 00c64670a..2887b3dd7 100755 --- a/packages/adapters/sqlalchemy_impl/viral_video_repository.py +++ b/packages/adapters/sqlalchemy_impl/viral_video_repository.py @@ -6,8 +6,8 @@ from sqlalchemy.orm import Session from packages.adapters.sqlalchemy_impl.models import ( ViralVideoJobModel, - ViralVideoStyleTemplateModel, ViralVideoPromptTemplateModel, + ViralVideoStyleTemplateModel, ) from packages.domain.viral_video import ViralVideoJob, ViralVideoStatus diff --git a/packages/domain/viral_video.py b/packages/domain/viral_video.py index c9fdfae6c..0bdf789aa 100755 --- a/packages/domain/viral_video.py +++ b/packages/domain/viral_video.py @@ -9,7 +9,6 @@ from __future__ import annotations - import sys from dataclasses import dataclass, field from datetime import datetime, timezone diff --git a/tests/unit/test_viral_video.py b/tests/unit/test_viral_video.py index 541f4a2b6..3f416ca3c 100755 --- a/tests/unit/test_viral_video.py +++ b/tests/unit/test_viral_video.py @@ -13,9 +13,8 @@ from __future__ import annotations from datetime import datetime, timezone from unittest.mock import MagicMock, patch -from pydantic import ValidationError - import pytest +from pydantic import ValidationError from packages.domain.viral_video import ( CREDITS_VIRAL_VIDEO_COST, @@ -27,7 +26,6 @@ from packages.domain.viral_video import ( ViralVideoStatus, ) - # ── 领域模型测试 ───────────────────────────────────────────────────────── @@ -326,10 +324,10 @@ class TestViralVideoRepository: assert repo.count_pending_by_user("user-001") == 2 def test_style_template_repo(self, db_session): + from packages.adapters.sqlalchemy_impl.models import ViralVideoStyleTemplateModel from packages.adapters.sqlalchemy_impl.viral_video_repository import ( SQLAlchemyViralVideoStyleTemplateRepository, ) - from packages.adapters.sqlalchemy_impl.models import ViralVideoStyleTemplateModel # 插入模板 tpl = ViralVideoStyleTemplateModel(