style: 统一 Ruff 代码格式
This commit is contained in:
@@ -200,7 +200,9 @@ def snapshot_from_batch(batch: HuyaRegisterBatch) -> dict:
|
||||
}
|
||||
|
||||
|
||||
def load_batch_snapshot(batch_id: str, *, recover_interrupted: bool = True) -> dict | None:
|
||||
def load_batch_snapshot(
|
||||
batch_id: str, *, recover_interrupted: bool = True
|
||||
) -> dict | None:
|
||||
"""从数据库加载批次详情;若服务中断则标记为 interrupted。"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
@@ -246,7 +248,9 @@ def load_batch_snapshot(batch_id: str, *, recover_interrupted: bool = True) -> d
|
||||
db.close()
|
||||
|
||||
|
||||
def list_batch_summaries(limit: int = 50, live_batch_ids: set[str] | None = None) -> list[dict]:
|
||||
def list_batch_summaries(
|
||||
limit: int = 50, live_batch_ids: set[str] | None = None
|
||||
) -> list[dict]:
|
||||
"""列出最近的注册批次摘要。live_batch_ids 中的 running 保持运行中。"""
|
||||
live = live_batch_ids or set()
|
||||
db = SessionLocal()
|
||||
@@ -269,42 +273,51 @@ def list_batch_summaries(limit: int = 50, live_batch_ids: set[str] | None = None
|
||||
if status == "running":
|
||||
running_count = max(
|
||||
0,
|
||||
int(row.total or 0) - int(row.success_count or 0) - int(row.failed_count or 0) - int(row.stopped_count or 0),
|
||||
int(row.total or 0)
|
||||
- int(row.success_count or 0)
|
||||
- int(row.failed_count or 0)
|
||||
- int(row.stopped_count or 0),
|
||||
)
|
||||
result.append({
|
||||
"batch_id": row.batch_id,
|
||||
"status": status,
|
||||
"message": message,
|
||||
"tag": row.tag or "",
|
||||
"created_by": row.created_by,
|
||||
"concurrency": int(row.concurrency or 1),
|
||||
"wait_seconds": float(row.wait_seconds or 180),
|
||||
"poll_interval": float(row.poll_interval or 5),
|
||||
"password_prefix": row.password_prefix or "hy",
|
||||
"use_proxy": bool(row.use_proxy),
|
||||
"total": int(row.total or 0),
|
||||
"success_count": int(row.success_count or 0),
|
||||
"failed_count": int(row.failed_count or 0),
|
||||
"stopped_count": int(row.stopped_count or 0),
|
||||
"running_count": running_count,
|
||||
"created_at": row.created_at,
|
||||
"started_at": row.started_at,
|
||||
"finished_at": row.finished_at,
|
||||
"items": [],
|
||||
})
|
||||
result.append(
|
||||
{
|
||||
"batch_id": row.batch_id,
|
||||
"status": status,
|
||||
"message": message,
|
||||
"tag": row.tag or "",
|
||||
"created_by": row.created_by,
|
||||
"concurrency": int(row.concurrency or 1),
|
||||
"wait_seconds": float(row.wait_seconds or 180),
|
||||
"poll_interval": float(row.poll_interval or 5),
|
||||
"password_prefix": row.password_prefix or "hy",
|
||||
"use_proxy": bool(row.use_proxy),
|
||||
"total": int(row.total or 0),
|
||||
"success_count": int(row.success_count or 0),
|
||||
"failed_count": int(row.failed_count or 0),
|
||||
"stopped_count": int(row.stopped_count or 0),
|
||||
"running_count": running_count,
|
||||
"created_at": row.created_at,
|
||||
"started_at": row.started_at,
|
||||
"finished_at": row.finished_at,
|
||||
"items": [],
|
||||
}
|
||||
)
|
||||
return result
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def _refresh_batch_counts(batch_row: HuyaRegisterBatchModel, items: list[HuyaRegisterItemModel]):
|
||||
def _refresh_batch_counts(
|
||||
batch_row: HuyaRegisterBatchModel, items: list[HuyaRegisterItemModel]
|
||||
):
|
||||
batch_row.total = len(items)
|
||||
batch_row.success_count = sum(1 for item in items if item.status == "success")
|
||||
batch_row.failed_count = sum(1 for item in items if item.status == "error")
|
||||
batch_row.stopped_count = sum(1 for item in items if item.status == "stopped")
|
||||
|
||||
|
||||
def format_success_export_line(username: str, uid: str, password: str, phone: str, sms_url: str) -> str:
|
||||
def format_success_export_line(
|
||||
username: str, uid: str, password: str, phone: str, sms_url: str
|
||||
) -> str:
|
||||
"""统一成功导出格式。"""
|
||||
account = (username or uid or "").strip()
|
||||
return f"{account}----{password or ''}----{phone or ''}----{sms_url or ''}"
|
||||
@@ -319,7 +332,9 @@ def export_success_logs_text(
|
||||
"""从成功流水表导出 txt。"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
query = db.query(HuyaRegisterSuccessLog).order_by(HuyaRegisterSuccessLog.id.asc())
|
||||
query = db.query(HuyaRegisterSuccessLog).order_by(
|
||||
HuyaRegisterSuccessLog.id.asc()
|
||||
)
|
||||
if batch_id:
|
||||
query = query.filter(HuyaRegisterSuccessLog.batch_id == batch_id)
|
||||
if tag:
|
||||
@@ -350,7 +365,9 @@ def list_success_logs(
|
||||
"""列出成功流水(含密码,供管理端展示/导出)。"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
query = db.query(HuyaRegisterSuccessLog).order_by(HuyaRegisterSuccessLog.id.desc())
|
||||
query = db.query(HuyaRegisterSuccessLog).order_by(
|
||||
HuyaRegisterSuccessLog.id.desc()
|
||||
)
|
||||
if batch_id:
|
||||
query = query.filter(HuyaRegisterSuccessLog.batch_id == batch_id)
|
||||
if tag:
|
||||
@@ -406,7 +423,11 @@ class HuyaRegisterRunner:
|
||||
|
||||
def _create_proxy_fetcher(self) -> ProxyFetcher | None:
|
||||
"""按需创建 API 代理获取器。"""
|
||||
if not self.batch.use_proxy or not self.proxy_config or not self.proxy_config.enabled:
|
||||
if (
|
||||
not self.batch.use_proxy
|
||||
or not self.proxy_config
|
||||
or not self.proxy_config.enabled
|
||||
):
|
||||
return None
|
||||
if not self.proxy_config.api_url:
|
||||
return None
|
||||
@@ -414,9 +435,15 @@ class HuyaRegisterRunner:
|
||||
wl_platform = "xiequ"
|
||||
wl_credentials = None
|
||||
if self.proxy_config.whitelist_enabled:
|
||||
wl_platform = getattr(self.proxy_config, "whitelist_platform", None) or "xiequ"
|
||||
wl_platform = (
|
||||
getattr(self.proxy_config, "whitelist_platform", None) or "xiequ"
|
||||
)
|
||||
wl_credentials = getattr(self.proxy_config, "whitelist_credentials", None)
|
||||
if not wl_credentials and self.proxy_config.whitelist_uid and self.proxy_config.whitelist_ukey:
|
||||
if (
|
||||
not wl_credentials
|
||||
and self.proxy_config.whitelist_uid
|
||||
and self.proxy_config.whitelist_ukey
|
||||
):
|
||||
wl_credentials = {
|
||||
"uid": self.proxy_config.whitelist_uid,
|
||||
"ukey": self.proxy_config.whitelist_ukey,
|
||||
@@ -446,7 +473,11 @@ class HuyaRegisterRunner:
|
||||
return
|
||||
db = SessionLocal()
|
||||
try:
|
||||
row = db.query(HuyaRegisterBatchModel).filter(HuyaRegisterBatchModel.id == self.batch.db_id).first()
|
||||
row = (
|
||||
db.query(HuyaRegisterBatchModel)
|
||||
.filter(HuyaRegisterBatchModel.id == self.batch.db_id)
|
||||
.first()
|
||||
)
|
||||
if not row:
|
||||
return
|
||||
row.status = self.batch.status
|
||||
@@ -485,7 +516,11 @@ class HuyaRegisterRunner:
|
||||
return
|
||||
db = SessionLocal()
|
||||
try:
|
||||
row = db.query(HuyaRegisterItemModel).filter(HuyaRegisterItemModel.id == item.db_id).first()
|
||||
row = (
|
||||
db.query(HuyaRegisterItemModel)
|
||||
.filter(HuyaRegisterItemModel.id == item.db_id)
|
||||
.first()
|
||||
)
|
||||
if not row:
|
||||
return
|
||||
row.status = item.status
|
||||
@@ -518,12 +553,16 @@ class HuyaRegisterRunner:
|
||||
setattr(item, key, value)
|
||||
self._persist_item(index)
|
||||
|
||||
def _save_success(self, index: int, result: HuyaAutoRegisterResult) -> tuple[int | None, str, str]:
|
||||
def _save_success(
|
||||
self, index: int, result: HuyaAutoRegisterResult
|
||||
) -> tuple[int | None, str, str]:
|
||||
"""成功时:写账号 + 成功流水(成功一个写一条,立即可导出)。"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
# upsert_huya_cookie 内部会 commit 一次
|
||||
account = upsert_huya_cookie(db, result.cookie, tag=self.batch.tag, username_hint="")
|
||||
account = upsert_huya_cookie(
|
||||
db, result.cookie, tag=self.batch.tag, username_hint=""
|
||||
)
|
||||
account.game_phone = result.phone or account.game_phone or ""
|
||||
if result.username:
|
||||
account.username = result.username
|
||||
@@ -537,23 +576,29 @@ class HuyaRegisterRunner:
|
||||
account.updated_at = _now()
|
||||
|
||||
item = self.batch.items[index]
|
||||
db.add(HuyaRegisterSuccessLog(
|
||||
batch_id=self.batch.batch_id,
|
||||
item_id=item.db_id,
|
||||
account_id=account.id,
|
||||
phone=result.phone or item.phone,
|
||||
username=result.username or account.username or "",
|
||||
uid=result.uid or account.uid or account.yyuid or "",
|
||||
password=result.password or "",
|
||||
sms_url=sms_url,
|
||||
tag=self.batch.tag,
|
||||
provider=result.provider or item.provider,
|
||||
created_by=self.batch.created_by,
|
||||
created_at=_now(),
|
||||
))
|
||||
db.add(
|
||||
HuyaRegisterSuccessLog(
|
||||
batch_id=self.batch.batch_id,
|
||||
item_id=item.db_id,
|
||||
account_id=account.id,
|
||||
phone=result.phone or item.phone,
|
||||
username=result.username or account.username or "",
|
||||
uid=result.uid or account.uid or account.yyuid or "",
|
||||
password=result.password or "",
|
||||
sms_url=sms_url,
|
||||
tag=self.batch.tag,
|
||||
provider=result.provider or item.provider,
|
||||
created_by=self.batch.created_by,
|
||||
created_at=_now(),
|
||||
)
|
||||
)
|
||||
db.commit()
|
||||
db.refresh(account)
|
||||
return account.id, account.username or "", account.uid or account.yyuid or ""
|
||||
return (
|
||||
account.id,
|
||||
account.username or "",
|
||||
account.uid or account.yyuid or "",
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@@ -578,12 +623,16 @@ class HuyaRegisterRunner:
|
||||
|
||||
def _run_one(self, index: int, item: SmsLine):
|
||||
if self._stop.is_set():
|
||||
self._set_item(index, status="stopped", message="已停止", finished_at=_now())
|
||||
self._set_item(
|
||||
index, status="stopped", message="已停止", finished_at=_now()
|
||||
)
|
||||
return
|
||||
|
||||
proxies, proxy_error = self._resolve_proxy()
|
||||
if proxy_error:
|
||||
self._set_item(index, status="error", message=proxy_error, finished_at=_now())
|
||||
self._set_item(
|
||||
index, status="error", message=proxy_error, finished_at=_now()
|
||||
)
|
||||
return
|
||||
|
||||
self._set_item(
|
||||
@@ -714,7 +763,12 @@ class HuyaRegisterRunner:
|
||||
futures = []
|
||||
for index in indices:
|
||||
if self._stop.is_set():
|
||||
self._set_item(index, status="stopped", message="已停止", finished_at=_now())
|
||||
self._set_item(
|
||||
index,
|
||||
status="stopped",
|
||||
message="已停止",
|
||||
finished_at=_now(),
|
||||
)
|
||||
continue
|
||||
item = self.sms_lines[index]
|
||||
futures.append(executor.submit(self._run_one, index, item))
|
||||
@@ -841,7 +895,11 @@ class HuyaRegisterRegistry:
|
||||
# DB 同步为 running,避免返回 pending 导致前端误判
|
||||
db = SessionLocal()
|
||||
try:
|
||||
row = db.query(HuyaRegisterBatchModel).filter(HuyaRegisterBatchModel.id == db_id).first()
|
||||
row = (
|
||||
db.query(HuyaRegisterBatchModel)
|
||||
.filter(HuyaRegisterBatchModel.id == db_id)
|
||||
.first()
|
||||
)
|
||||
if row:
|
||||
row.status = "running"
|
||||
row.message = "批次运行中"
|
||||
@@ -850,7 +908,9 @@ class HuyaRegisterRegistry:
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
runner = HuyaRegisterRunner(batch=batch, sms_lines=sms_lines, proxy_config=proxy_config)
|
||||
runner = HuyaRegisterRunner(
|
||||
batch=batch, sms_lines=sms_lines, proxy_config=proxy_config
|
||||
)
|
||||
with self._lock:
|
||||
self._runners[batch_id] = runner
|
||||
return runner
|
||||
@@ -930,7 +990,9 @@ class HuyaRegisterRegistry:
|
||||
if poll_interval is not None:
|
||||
batch_row.poll_interval = int(max(1.0, float(poll_interval)))
|
||||
if password_prefix is not None:
|
||||
batch_row.password_prefix = (password_prefix or "hy").strip()[:8] or "hy"
|
||||
batch_row.password_prefix = (password_prefix or "hy").strip()[
|
||||
:8
|
||||
] or "hy"
|
||||
if fixed_password is not None:
|
||||
batch_row.fixed_password = (fixed_password or "").strip()
|
||||
if use_proxy is not None:
|
||||
@@ -965,7 +1027,12 @@ class HuyaRegisterRegistry:
|
||||
|
||||
batch = _batch_from_db(batch_row, item_rows)
|
||||
sms_lines = [
|
||||
SmsLine(phone=item.phone, url=item.sms_url, provider=item.provider, raw=f"{item.phone}----{item.sms_url}")
|
||||
SmsLine(
|
||||
phone=item.phone,
|
||||
url=item.sms_url,
|
||||
provider=item.provider,
|
||||
raw=f"{item.phone}----{item.sms_url}",
|
||||
)
|
||||
for item in batch.items
|
||||
]
|
||||
finally:
|
||||
|
||||
Reference in New Issue
Block a user