MCPcopy Create free account
hub / github.com/ZyphrZero/z.ai2api_python / sync_from_database

Method sync_from_database

app/utils/token_pool.py:502–566  ·  view source on GitHub ↗

从数据库同步 Token 状态(禁用/启用状态) Args: provider: 提供商名称 说明: - 从数据库读取最新的 Token 启用状态 - 如果数据库中 Token 被禁用,则从池中移除 - 如果数据库中有新增的启用 Token,则添加到池中 - 保留现有 Token 的运行时统计(请求数、成功率等)

(self, provider: str = "zai")

Source from the content-addressed store, hash-verified

500 logger.error(f"💥 {exception_count} 个 Token 检查异常")
501
502 async def sync_from_database(self, provider: str = "zai"):
503 """
504 从数据库同步 Token 状态(禁用/启用状态)
505
506 Args:
507 provider: 提供商名称
508
509 说明:
510 - 从数据库读取最新的 Token 启用状态
511 - 如果数据库中 Token 被禁用,则从池中移除
512 - 如果数据库中有新增的启用 Token,则添加到池中
513 - 保留现有 Token 的运行时统计(请求数、成功率等)
514 """
515 from app.services.token_dao import get_token_dao
516
517 dao = get_token_dao()
518
519 # 从数据库加载所有启用的认证用户 Token
520 token_records = await dao.get_tokens_by_provider(provider, enabled_only=True)
521
522 # 构建数据库中的 Token 映射
523 db_tokens = {
524 record["token"]: (record["id"], record.get("token_type", "unknown"))
525 for record in token_records
526 if record.get("token_type") != "guest" # 过滤 guest token
527 }
528
529 with self._lock:
530 # 1. 移除已在数据库中禁用的 Token
531 tokens_to_remove = []
532 for token_value in list(self.token_statuses.keys()):
533 if token_value not in db_tokens:
534 tokens_to_remove.append(token_value)
535
536 for token_value in tokens_to_remove:
537 del self.token_statuses[token_value]
538 del self.token_id_map[token_value]
539 logger.info(f"🗑️ 从池中移除已禁用 Token: {token_value[:20]}...")
540
541 # 2. 添加新启用的 Token
542 new_tokens_count = 0
543 for token_value, (token_id, token_type) in db_tokens.items():
544 if token_value not in self.token_statuses:
545 self.token_statuses[token_value] = TokenStatus(
546 token=token_value,
547 token_id=token_id,
548 token_type=token_type
549 )
550 self.token_id_map[token_value] = token_id
551 new_tokens_count += 1
552 logger.info(f"➕ 添加新启用 Token: {token_value[:20]}...")
553
554 # 3. 更新现有 Token 的类型(如果数据库中有更新)
555 for token_value, (token_id, token_type) in db_tokens.items():
556 if token_value in self.token_statuses:
557 old_type = self.token_statuses[token_value].token_type
558 if old_type != token_type:
559 self.token_statuses[token_value].token_type = token_type

Callers 8

run_directory_importFunction · 0.80
run_token_maintenanceFunction · 0.80
add_tokensFunction · 0.80
toggle_tokenFunction · 0.80
delete_tokenFunction · 0.80
validate_tokensFunction · 0.80
validate_single_tokenFunction · 0.80
sync_token_poolFunction · 0.80

Calls 3

get_token_daoFunction · 0.90
TokenStatusClass · 0.85

Tested by

no test coverage detected