| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import json
- from pydantic import BaseModel, field_validator
- from typing import Optional, Dict, Any, Literal
- from datetime import datetime
- class AccountBase(BaseModel):
- pool_name: str
- username: str
- password: Optional[str] = None
- extra_data: Optional[Dict[str, Any]] = None
- status: Optional[Literal['active','disable']] = None
- next_use_time: Optional[datetime] = None
- @field_validator("extra_data", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- # --- 4. 请求/响应 Schema (Pydantic) ---
- class AccountCreate(AccountBase):
- pass
- class AccountUpdate(AccountBase):
- """
- 更新代理 Payload
- 注意:因为是更新,前端可能只传部分字段,所以这里全部重新定义为 Optional
- """
- pool_name: Optional[str] = None
- username: Optional[str] = None
- password: Optional[str] = None
- extra_data: Optional[Dict[str, Any]] = None
- next_use_time: Optional[datetime] = None
- status: Optional[str] = None
- class AccountOut(AccountBase):
- id: int
- created_at: datetime
- updated_at: datetime
- model_config = {
- "from_attributes": True
- }
- class GetNextAccountPayload(BaseModel):
- """获取下个IP的请求参数"""
- pool_name: str
- account_cd: int
-
|