mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
refactor: 重构异步任务系统和计费服务架构
- 重构任务系统:新增 lifecycle (TaskStatus/BillingStatus)、context、application 模块 - 将 video tasks 泛化为 async tasks,支持更通用的异步任务管理 - 新增 Gemini Files 管理模块和管理界面 - 重构 billing 服务:拆分 schema.py 和 service.py - 新增 candidate 服务模块用于请求候选管理 - 数据库迁移:添加 billing_status、request_id、gemini_file_mappings 表和索引 - 移除废弃的 video_telemetry、task orchestrator 等模块
This commit is contained in:
@@ -4,14 +4,14 @@ from unittest.mock import AsyncMock, MagicMock
|
||||
import pytest
|
||||
|
||||
from src.core.api_format.conversion.internal_video import InternalVideoPollResult, VideoStatus
|
||||
from src.services.video.task_poller import VideoTaskPollerService
|
||||
from src.services.task.impl.video_poller import VideoTaskPollerAdapter
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_poll_task_status_routes_gemini_video_to_gemini(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
poller = VideoTaskPollerService()
|
||||
adapter = VideoTaskPollerAdapter()
|
||||
|
||||
task = SimpleNamespace(
|
||||
endpoint_id="e1",
|
||||
@@ -22,24 +22,24 @@ async def test_poll_task_status_routes_gemini_video_to_gemini(
|
||||
endpoint = SimpleNamespace(id="e1", base_url="https://example.com", api_format="gemini:video")
|
||||
key = SimpleNamespace(id="k1", api_key="enc")
|
||||
|
||||
monkeypatch.setattr(poller, "_get_endpoint", lambda _db, _id: endpoint)
|
||||
monkeypatch.setattr(poller, "_get_key", lambda _db, _id: key)
|
||||
monkeypatch.setattr(adapter, "_get_endpoint", lambda _db, _id: endpoint)
|
||||
monkeypatch.setattr(adapter, "_get_key", lambda _db, _id: key)
|
||||
monkeypatch.setattr(
|
||||
"src.services.video.task_poller.crypto_service.decrypt", lambda _v: "decrypted"
|
||||
"src.services.task.impl.video_poller.crypto_service.decrypt", lambda _v: "decrypted"
|
||||
)
|
||||
|
||||
auth_info = SimpleNamespace(auth_header="authorization", auth_value="Bearer x")
|
||||
monkeypatch.setattr(
|
||||
"src.services.video.task_poller.get_provider_auth",
|
||||
"src.services.task.impl.video_poller.get_provider_auth",
|
||||
AsyncMock(return_value=auth_info),
|
||||
)
|
||||
|
||||
poll_gemini = AsyncMock(return_value=InternalVideoPollResult(status=VideoStatus.PROCESSING))
|
||||
poll_openai = AsyncMock(return_value=InternalVideoPollResult(status=VideoStatus.PROCESSING))
|
||||
monkeypatch.setattr(poller, "_poll_gemini", poll_gemini)
|
||||
monkeypatch.setattr(poller, "_poll_openai", poll_openai)
|
||||
monkeypatch.setattr(adapter, "_poll_gemini", poll_gemini)
|
||||
monkeypatch.setattr(adapter, "_poll_openai", poll_openai)
|
||||
|
||||
result = await poller._poll_task_status(MagicMock(), task)
|
||||
result = await adapter._poll_task_status(MagicMock(), task)
|
||||
assert result.status == VideoStatus.PROCESSING
|
||||
assert poll_gemini.await_count == 1
|
||||
assert poll_openai.await_count == 0
|
||||
|
||||
Reference in New Issue
Block a user