Files
boss_dp/server/models.py
2026-02-12 16:27:43 +08:00

83 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
Pydantic 数据模型 —— 用于 REST API 请求 / 响应以及内部状态。
"""
from __future__ import annotations
import time
import uuid
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
from common.protocol import TaskStatus, TaskType
# ────────────────────────── Worker ──────────────────────────
class BrowserProfile(BaseModel):
"""比特浏览器窗口信息Worker 上报)。"""
id: str
name: str = ""
remark: str = ""
class WorkerInfo(BaseModel):
"""一台 Worker 的运行时信息(内存中保存)。"""
worker_id: str
worker_name: str = ""
browsers: List[BrowserProfile] = []
online: bool = True
last_heartbeat: float = Field(default_factory=time.time)
connected_at: float = Field(default_factory=time.time)
current_task_id: Optional[str] = None
class WorkerOut(BaseModel):
"""返回给前端的 Worker 信息。"""
worker_id: str
worker_name: str
browsers: List[BrowserProfile]
online: bool
current_task_id: Optional[str] = None
# ────────────────────────── Task ──────────────────────────
class TaskCreate(BaseModel):
"""前端提交任务的请求体。"""
task_type: TaskType
worker_id: Optional[str] = None # 手动指定机器
account_name: Optional[str] = None # 按比特浏览器窗口名自动路由
params: Dict[str, Any] = {} # 任务参数(如 job_title, max_greet 等)
class TaskInfo(BaseModel):
"""任务完整信息(内存 / 返回前端)。"""
task_id: str = Field(default_factory=lambda: uuid.uuid4().hex[:12])
task_type: TaskType
status: TaskStatus = TaskStatus.PENDING
worker_id: Optional[str] = None
account_name: Optional[str] = None
params: Dict[str, Any] = {}
progress: Optional[str] = None # 最新进度描述
result: Any = None # 最终结果
error: Optional[str] = None
created_at: float = Field(default_factory=time.time)
updated_at: float = Field(default_factory=time.time)
class TaskOut(BaseModel):
"""返回给前端的任务信息。"""
task_id: str
task_type: TaskType
status: TaskStatus
worker_id: Optional[str] = None
account_name: Optional[str] = None
params: Dict[str, Any] = {}
progress: Optional[str] = None
result: Any = None
error: Optional[str] = None
created_at: float
updated_at: float