Spaces:
Runtime error
Runtime error
| """Token 服务外观(Facade)""" | |
| from typing import List, Optional, Dict | |
| from app.services.token.models import TokenInfo, EffortType | |
| class TokenService: | |
| """ | |
| Token 服务外观 | |
| 提供简化的 API,隐藏内部实现细节 | |
| """ | |
| async def _get_manager(): | |
| from app.services.token.manager import get_token_manager | |
| return await get_token_manager() | |
| async def get_token(pool_name: str = "ssoBasic") -> Optional[str]: | |
| """ | |
| 获取可用 Token | |
| Args: | |
| pool_name: Token 池名称 | |
| Returns: | |
| Token 字符串(不含 sso= 前缀)或 None | |
| """ | |
| manager = await TokenService._get_manager() | |
| return manager.get_token(pool_name) | |
| async def consume(token: str, effort: EffortType = EffortType.LOW) -> bool: | |
| """ | |
| 消耗 Token 配额(本地预估) | |
| Args: | |
| token: Token 字符串 | |
| effort: 消耗力度 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.consume(token, effort) | |
| async def sync_usage(token: str, effort: EffortType = EffortType.LOW) -> bool: | |
| """ | |
| 同步 Token 使用量(优先 API,降级本地) | |
| Args: | |
| token: Token 字符串 | |
| effort: 降级时的消耗力度 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.sync_usage(token, effort) | |
| async def record_fail(token: str, status_code: int = 401, reason: str = "") -> bool: | |
| """ | |
| 记录 Token 失败 | |
| Args: | |
| token: Token 字符串 | |
| status_code: HTTP 状态码 | |
| reason: 失败原因 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.record_fail(token, status_code, reason) | |
| async def add_token(token: str, pool_name: str = "ssoBasic") -> bool: | |
| """ | |
| 添加 Token | |
| Args: | |
| token: Token 字符串 | |
| pool: Token 池名称 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.add(token, pool_name) | |
| async def remove_token(token: str) -> bool: | |
| """ | |
| 删除 Token | |
| Args: | |
| token: Token 字符串 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.remove(token) | |
| async def reset_token(token: str) -> bool: | |
| """ | |
| 重置单个 Token | |
| Args: | |
| token: Token 字符串 | |
| Returns: | |
| 是否成功 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return await manager.reset_token(token) | |
| async def reset_all(): | |
| """重置所有 Token""" | |
| manager = await TokenService._get_manager() | |
| await manager.reset_all() | |
| async def get_stats() -> Dict[str, dict]: | |
| """ | |
| 获取统计信息 | |
| Returns: | |
| 各池的统计信息 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return manager.get_stats() | |
| async def list_tokens(pool_name: str = "ssoBasic") -> List[TokenInfo]: | |
| """ | |
| 获取指定池的所有 Token | |
| Args: | |
| pool_name: Token 池名称 | |
| Returns: | |
| Token 列表 | |
| """ | |
| manager = await TokenService._get_manager() | |
| return manager.get_pool_tokens(pool_name) | |
| __all__ = ["TokenService"] | |