🐛 修复排行榜 Users.League 的部分字段为 None 时 错误处理的错误

This commit is contained in:
2023-11-14 00:45:38 +08:00
committed by 呵呵です
parent ca8ab5871b
commit c09d10b799
2 changed files with 29 additions and 5 deletions

View File

@@ -24,7 +24,7 @@ from .constant import BASE_URL, GAME_TYPE, RANK_PERCENTILE
from .model import IORank
from .schemas.league_all import FailedModel as LeagueAllFailed
from .schemas.league_all import LeagueAll
from .schemas.league_all import User as LeagueAllUser
from .schemas.league_all import ValidUser as LeagueAllUser
from .schemas.user_info import FailedModel as InfoFailed
from .schemas.user_info import (
NeverPlayedLeague,
@@ -216,7 +216,7 @@ async def get_io_rank_data() -> None:
user = sort(users, field)
return asdict(User(ID=user.id, name=user.username)), field(user)
users = league_all.data.users
users = [i for i in league_all.data.users if isinstance(i, LeagueAllUser)]
rank_to_users: defaultdict[Rank, list[LeagueAllUser]] = defaultdict(list)
for i in users:
rank_to_users[i.league.rank].append(i)

View File

@@ -7,7 +7,7 @@ from .base import SuccessModel as BaseSuccessModel
class SuccessModel(BaseSuccessModel):
class Data(BaseModel):
class User(BaseModel):
class ValidUser(BaseModel):
class League(BaseModel):
gamesplayed: int
gameswon: int
@@ -30,10 +30,34 @@ class SuccessModel(BaseSuccessModel):
verified: bool
country: str | None
users: list[User]
class InvalidUser(BaseModel):
class League(BaseModel):
gamesplayed: int
gameswon: int
rating: float
glicko: float | None
rd: float | None
rank: Rank
bestrank: Rank
apm: float | None
pps: float | None
vs: float | None
decaying: bool
id: str = Field(..., alias='_id')
username: str
role: str
xp: float
league: League
supporter: bool
verified: bool
country: str | None
users: list[ValidUser | InvalidUser]
data: Data
LeagueAll = SuccessModel | FailedModel
User = SuccessModel.Data.User
ValidUser = SuccessModel.Data.ValidUser
InvalidUser = SuccessModel.Data.InvalidUser