执行 Ruff 安全自动修复

This commit is contained in:
yml2213
2026-08-31 10:28:14 +08:00
parent 2a1d27f953
commit b58c6b4357
145 changed files with 940 additions and 993 deletions
+127 -126
View File
@@ -1,8 +1,9 @@
"""Pydantic 请求/响应模型"""
from datetime import datetime, timezone
from typing import Optional, Any
from pydantic import BaseModel, Field, ConfigDict, model_serializer
from datetime import UTC, datetime
from typing import Any
from pydantic import BaseModel, ConfigDict, Field, model_serializer
from .huya_defaults import (
HUYA_DEFAULT_BIND_ACT_ID,
@@ -32,16 +33,16 @@ class YybSelectionRequest(BaseModel):
role_name: str = Field(..., min_length=1, max_length=128)
def _ensure_tz(dt: Optional[datetime]) -> Optional[datetime]:
def _ensure_tz(dt: datetime | None) -> datetime | None:
"""确保 datetime 带有 UTC 时区信息,无时区的视为 UTC。"""
if dt is None:
return None
if dt.tzinfo is None:
return dt.replace(tzinfo=timezone.utc)
return dt.replace(tzinfo=UTC)
return dt
def _isoformat(dt: Optional[datetime]) -> str | None:
def _isoformat(dt: datetime | None) -> str | None:
normalized = _ensure_tz(dt)
return normalized.isoformat() if normalized is not None else None
@@ -66,9 +67,9 @@ class UserInfo(BaseModel):
role: str
is_active: bool
remark: str = ""
created_at: Optional[datetime] = None
created_at: datetime | None = None
permissions: list[str] = []
custom_permissions: Optional[list[str]] = None
custom_permissions: list[str] | None = None
model_config = ConfigDict(from_attributes=True)
@@ -95,11 +96,11 @@ class UserCreate(BaseModel):
class UserUpdate(BaseModel):
password: Optional[str] = None
role: Optional[str] = None
is_active: Optional[bool] = None
remark: Optional[str] = None
custom_permissions: Optional[list[str]] = None
password: str | None = None
role: str | None = None
is_active: bool | None = None
remark: str | None = None
custom_permissions: list[str] | None = None
class UserRename(BaseModel):
@@ -119,12 +120,12 @@ class AccountImport(BaseModel):
class AccountAssign(BaseModel):
assigned_to: Optional[int] = None
assigned_to: int | None = None
class BatchAssign(BaseModel):
account_ids: list[int]
assigned_to: Optional[int] = None # None=取消分配
assigned_to: int | None = None # None=取消分配
class AccountBulkSelection(BaseModel):
@@ -143,22 +144,22 @@ class AccountBulkTag(AccountBulkSelection):
class AccountTag(BaseModel):
tag: Optional[str] = None
account_ids: Optional[list[int]] = None
tag: str | None = None
account_ids: list[int] | None = None
class AccountOut(BaseModel):
id: int
username: str
# 敏感字段根据角色决定是否返回
password: Optional[str] = None
email: Optional[str] = None
email_password: Optional[str] = None
password: str | None = None
email: str | None = None
email_password: str | None = None
tag: str = ""
assigned_to: Optional[int] = None
assigned_username: Optional[str] = None
assigned_to: int | None = None
assigned_username: str | None = None
remark: str = ""
created_at: Optional[datetime] = None
created_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -203,8 +204,8 @@ class LoginTaskOut(BaseModel):
cookie: str = ""
message: str = ""
created_by: int
created_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
created_at: datetime | None = None
finished_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -239,8 +240,8 @@ class AccountCheckItemOut(BaseModel):
email: str
status: str
message: str
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
started_at: datetime | None = None
finished_at: datetime | None = None
class AccountCheckBatchOut(BaseModel):
@@ -256,9 +257,9 @@ class AccountCheckBatchOut(BaseModel):
finished_count: int
running_count: int
status_counts: dict[str, int]
created_at: Optional[datetime] = None
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
created_at: datetime | None = None
started_at: datetime | None = None
finished_at: datetime | None = None
items: list[AccountCheckItemOut]
@@ -327,12 +328,12 @@ class HuyaAutoRegisterRetryRequest(BaseModel):
"""
mode: str = Field("continue", max_length=32)
concurrency: Optional[int] = Field(None, ge=1, le=5)
wait_seconds: Optional[float] = Field(None, ge=15, le=600)
poll_interval: Optional[float] = Field(None, ge=1, le=30)
password_prefix: Optional[str] = Field(None, max_length=8)
fixed_password: Optional[str] = Field(None, max_length=64)
use_proxy: Optional[bool] = None
concurrency: int | None = Field(None, ge=1, le=5)
wait_seconds: float | None = Field(None, ge=15, le=600)
poll_interval: float | None = Field(None, ge=1, le=30)
password_prefix: str | None = Field(None, max_length=8)
fixed_password: str | None = Field(None, max_length=64)
use_proxy: bool | None = None
class HuyaAutoRegisterItemOut(BaseModel):
@@ -346,15 +347,15 @@ class HuyaAutoRegisterItemOut(BaseModel):
change_code: str = ""
attempts: int = 0
change_attempts: int = 0
account_id: Optional[int] = None
account_id: int | None = None
username: str = ""
uid: str = ""
password: str = ""
password_changed: bool = False
cookie: str = ""
cookie_preview: str = ""
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
started_at: datetime | None = None
finished_at: datetime | None = None
class HuyaAutoRegisterBatchOut(BaseModel):
@@ -373,17 +374,17 @@ class HuyaAutoRegisterBatchOut(BaseModel):
failed_count: int
stopped_count: int
running_count: int
created_at: Optional[datetime] = None
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
created_at: datetime | None = None
started_at: datetime | None = None
finished_at: datetime | None = None
items: list[HuyaAutoRegisterItemOut] = []
class HuyaRegisterSuccessLogOut(BaseModel):
id: int
batch_id: str = ""
item_id: Optional[int] = None
account_id: Optional[int] = None
item_id: int | None = None
account_id: int | None = None
phone: str = ""
username: str = ""
uid: str = ""
@@ -391,8 +392,8 @@ class HuyaRegisterSuccessLogOut(BaseModel):
sms_url: str = ""
tag: str = ""
provider: str = ""
created_by: Optional[int] = None
created_at: Optional[datetime] = None
created_by: int | None = None
created_at: datetime | None = None
export_line: str = ""
@@ -435,14 +436,14 @@ class HuyaAccountOut(BaseModel):
status: str = ""
# 上次成功登录渠道: web / app / sms (空 = 仅导入 Cookie, 从未协议登录)
login_channel: str = ""
points: Optional[int] = None
points: int | None = None
game_name: str = ""
game_channel: str = ""
game_phone: str = ""
assigned_to: Optional[int] = None
assigned_username: Optional[str] = None
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
assigned_to: int | None = None
assigned_username: str | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -477,7 +478,7 @@ class HuyaConfigOut(BaseModel):
outer_act_id: str = HUYA_DEFAULT_OUTER_ACT_ID
bind_act_id: str = HUYA_DEFAULT_BIND_ACT_ID
pay_channel: str = HUYA_DEFAULT_PAY_CHANNEL
updated_at: Optional[datetime] = None
updated_at: datetime | None = None
@model_serializer
def _serialize(self) -> dict[str, Any]:
@@ -492,11 +493,11 @@ class HuyaConfigOut(BaseModel):
class HuyaConfigUpdate(BaseModel):
room_pid: Optional[str] = None
sid: Optional[str] = None
outer_act_id: Optional[str] = None
bind_act_id: Optional[str] = None
pay_channel: Optional[str] = None
room_pid: str | None = None
sid: str | None = None
outer_act_id: str | None = None
bind_act_id: str | None = None
pay_channel: str | None = None
class HuyaTaskBatchRequest(BaseModel):
@@ -515,10 +516,10 @@ class HuyaTaskOut(BaseModel):
task_type: str
status: str
message: str = ""
result: Optional[dict[str, Any]] = None
result: dict[str, Any] | None = None
created_by: int
created_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
created_at: datetime | None = None
finished_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -544,10 +545,10 @@ class HuyaGoodsOut(BaseModel):
id: int
product_id: str
name: str = ""
price: Optional[int] = None
price: int | None = None
remain_text: str = ""
raw: Optional[dict[str, Any]] = None
updated_at: Optional[datetime] = None
raw: dict[str, Any] | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -569,15 +570,15 @@ class HuyaRechargeGoodsOut(BaseModel):
spu_id: str
sku_id: str = ""
name: str = ""
price: Optional[int] = None
stock: Optional[int] = None
buy_limit: Optional[int] = None
price: int | None = None
stock: int | None = None
buy_limit: int | None = None
icon: str = ""
description: str = ""
task_id: str = ""
task_name: str = ""
raw: Optional[dict[str, Any]] = None
updated_at: Optional[datetime] = None
raw: dict[str, Any] | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -625,7 +626,7 @@ class DouyuConfigOut(BaseModel):
gold_api_account_template_name: str = "斗鱼昵称"
gift_id: str = "23643"
skin_id: str = "2942"
updated_at: Optional[datetime] = None
updated_at: datetime | None = None
@model_serializer
def _serialize(self) -> dict[str, Any]:
@@ -658,31 +659,31 @@ class DouyuConfigOut(BaseModel):
class DouyuConfigUpdate(BaseModel):
manual_id: Optional[str] = None
rid: Optional[str] = None
bind_act_alias: Optional[str] = None
confirm_act_alias: Optional[str] = None
legacy_act_alias: Optional[str] = None
room_id: Optional[str] = None
elite_amount: Optional[int] = Field(None, ge=1)
esports_manual_id: Optional[str] = None
esports_act_alias: Optional[str] = None
esports_amount: Optional[int] = Field(None, ge=1)
esports_chicken_gift_id: Optional[str] = None
esports_chicken_skin_id: Optional[str] = None
esports_firework_gift_id: Optional[str] = None
esports_firework_skin_id: Optional[str] = None
xpd_act_alias: Optional[str] = None
xpd_act_id: Optional[str] = None
xpd_rid: Optional[str] = None
gold_pay_type: Optional[int] = Field(None, ge=1, le=9)
gold_recharge_channel: Optional[str] = Field(
manual_id: str | None = None
rid: str | None = None
bind_act_alias: str | None = None
confirm_act_alias: str | None = None
legacy_act_alias: str | None = None
room_id: str | None = None
elite_amount: int | None = Field(None, ge=1)
esports_manual_id: str | None = None
esports_act_alias: str | None = None
esports_amount: int | None = Field(None, ge=1)
esports_chicken_gift_id: str | None = None
esports_chicken_skin_id: str | None = None
esports_firework_gift_id: str | None = None
esports_firework_skin_id: str | None = None
xpd_act_alias: str | None = None
xpd_act_id: str | None = None
xpd_rid: str | None = None
gold_pay_type: int | None = Field(None, ge=1, le=9)
gold_recharge_channel: str | None = Field(
None, pattern="^(wechat_qr|supplier_api)$"
)
gold_api_product_id: Optional[str] = Field(None, max_length=128)
gold_api_account_template_name: Optional[str] = Field(None, max_length=64)
gift_id: Optional[str] = None
skin_id: Optional[str] = None
gold_api_product_id: str | None = Field(None, max_length=128)
gold_api_account_template_name: str | None = Field(None, max_length=64)
gift_id: str | None = None
skin_id: str | None = None
class DouyuTaskBatchRequest(BaseModel):
@@ -709,10 +710,10 @@ class DouyuTaskOut(BaseModel):
handbook_scope: str = "legacy"
status: str
message: str = ""
result: Optional[dict[str, Any]] = None
result: dict[str, Any] | None = None
created_by: int
created_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
created_at: datetime | None = None
finished_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -740,10 +741,10 @@ class DouyuGoodsOut(BaseModel):
id: int
commodity_id: str
name: str = ""
score: Optional[int] = None
score: int | None = None
status: str = ""
raw: Optional[dict[str, Any]] = None
updated_at: Optional[datetime] = None
raw: dict[str, Any] | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -766,41 +767,41 @@ class DouyuTaskAccountOut(BaseModel):
uid: str = ""
nickname: str = ""
tag: str = ""
points: Optional[int] = None
points: int | None = None
game_name: str = ""
game_channel: str = ""
gold_balance: Optional[int] = None
exchange_balance: Optional[int] = None
gold_balance: int | None = None
exchange_balance: int | None = None
bind_status: str = ""
change_role_wait_time: Optional[int] = None
esports_points: Optional[int] = None
change_role_wait_time: int | None = None
esports_points: int | None = None
esports_game_name: str = ""
esports_game_channel: str = ""
esports_bind_status: str = ""
esports_change_role_wait_time: Optional[int] = None
esports_can_change_time: Optional[int] = None
esports_change_role_wait_time: int | None = None
esports_can_change_time: int | None = None
xpd_game_name: str = ""
xpd_openid: str = ""
xpd_role_id: str = ""
xpd_plat_id: Optional[int] = None
xpd_area_id: Optional[int] = None
xpd_balance: Optional[int] = None
xpd_fragments: Optional[int] = None
xpd_plat_id: int | None = None
xpd_area_id: int | None = None
xpd_balance: int | None = None
xpd_fragments: int | None = None
xpd_bind_status: str = ""
assigned_to: Optional[int] = None
assigned_username: Optional[str] = None
assigned_to: int | None = None
assigned_username: str | None = None
class DouyuXpdGoodsOut(BaseModel):
id: int
commodity_id: str
name: str = ""
price: Optional[int] = None
org_price: Optional[int] = None
price: int | None = None
org_price: int | None = None
category: str = ""
goods_left: Optional[int] = None
raw: Optional[dict[str, Any]] = None
updated_at: Optional[datetime] = None
goods_left: int | None = None
raw: dict[str, Any] | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)
@@ -827,23 +828,23 @@ class ProxyConfigOut(BaseModel):
https: str = ""
whitelist_enabled: bool = False
whitelist_platform: str = "xiequ"
whitelist_credentials: Optional[dict] = None
whitelist_credentials: dict | None = None
# 旧字段保留(向后兼容)
whitelist_uid: str = ""
whitelist_ukey: str = ""
class ProxyConfigUpdate(BaseModel):
enabled: Optional[bool] = None
api_url: Optional[str] = None
http: Optional[str] = None
https: Optional[str] = None
whitelist_enabled: Optional[bool] = None
whitelist_platform: Optional[str] = "xiequ"
whitelist_credentials: Optional[dict] = None
enabled: bool | None = None
api_url: str | None = None
http: str | None = None
https: str | None = None
whitelist_enabled: bool | None = None
whitelist_platform: str | None = "xiequ"
whitelist_credentials: dict | None = None
# 旧字段保留(向后兼容)
whitelist_uid: Optional[str] = None
whitelist_ukey: Optional[str] = None
whitelist_uid: str | None = None
whitelist_ukey: str | None = None
# ---- 代理平台元信息 ----