适配 Pydantic V2

This commit is contained in:
2024-04-24 16:49:01 +08:00
parent d2a3801dac
commit 27518c0408
3 changed files with 35 additions and 37 deletions

View File

@@ -28,20 +28,20 @@ class SuccessModel(BaseSuccessModel):
league: League league: League
supporter: bool supporter: bool
verified: bool verified: bool
country: str | None country: str | None = None
class InvalidUser(BaseModel): class InvalidUser(BaseModel):
class League(BaseModel): class League(BaseModel):
gamesplayed: int gamesplayed: int
gameswon: int gameswon: int
rating: float rating: float
glicko: float | None glicko: float | None = None
rd: float | None rd: float | None = None
rank: Rank rank: Rank
bestrank: Rank bestrank: Rank
apm: float | None apm: float | None = None
pps: float | None pps: float | None = None
vs: float | None vs: float | None = None
decaying: bool decaying: bool
id: str = Field(..., alias='_id') id: str = Field(..., alias='_id')

View File

@@ -14,7 +14,7 @@ class SuccessModel(BaseSuccessModel):
class Badge(BaseModel): class Badge(BaseModel):
id: str id: str
label: str label: str
ts: datetime | None ts: datetime | None = None
class NeverPlayedLeague(BaseModel): class NeverPlayedLeague(BaseModel):
gamesplayed: Literal[0] gamesplayed: Literal[0]
@@ -60,8 +60,8 @@ class SuccessModel(BaseSuccessModel):
bestrank: Rank bestrank: Rank
standing: int standing: int
standing_local: int standing_local: int
next_rank: Rank | None next_rank: Rank | None = None
prev_rank: Rank | None prev_rank: Rank | None = None
next_at: int next_at: int
prev_at: int prev_at: int
percentile: float percentile: float
@@ -70,7 +70,7 @@ class SuccessModel(BaseSuccessModel):
rd: float rd: float
apm: float apm: float
pps: float pps: float
vs: float | None vs: float | None = None
decaying: bool decaying: bool
class Connections(BaseModel): class Connections(BaseModel):
@@ -78,7 +78,7 @@ class SuccessModel(BaseSuccessModel):
id: str id: str
username: str username: str
discord: Discord | None discord: Discord | None = None
class Distinguishment(BaseModel): class Distinguishment(BaseModel):
type: str type: str
@@ -86,33 +86,33 @@ class SuccessModel(BaseSuccessModel):
id: str = Field(..., alias='_id') id: str = Field(..., alias='_id')
username: str username: str
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'banned'] role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'banned']
ts: datetime | None ts: datetime | None = None
botmaster: str | None botmaster: str | None = None
badges: list[Badge] badges: list[Badge]
xp: float xp: float
gamesplayed: int gamesplayed: int
gameswon: int gameswon: int
gametime: float gametime: float
country: str | None country: str | None = None
badstanding: bool | None badstanding: bool | None = None
supporter: bool | None # osk说是必有, 但实际上不是 fk osk supporter: bool | None = None # osk说是必有, 但实际上不是 fk osk
supporter_tier: int supporter_tier: int
verified: bool verified: bool
league: NeverPlayedLeague | NeverRatedLeague | RatedLeague league: NeverPlayedLeague | NeverRatedLeague | RatedLeague
avatar_revision: int | None avatar_revision: int | None = None
"""This user's avatar ID. Get their avatar at """This user's avatar ID. Get their avatar at
https://tetr.io/user-content/avatars/{ USERID }.jpg?rv={ AVATAR_REVISION }""" https://tetr.io/user-content/avatars/{ USERID }.jpg?rv={ AVATAR_REVISION }"""
banner_revision: int | None banner_revision: int | None = None
"""This user's banner ID. Get their banner at """This user's banner ID. Get their banner at
https://tetr.io/user-content/banners/{ USERID }.jpg?rv={ BANNER_REVISION } https://tetr.io/user-content/banners/{ USERID }.jpg?rv={ BANNER_REVISION }
Ignore this field if the user is not a supporter.""" Ignore this field if the user is not a supporter."""
bio: str | None bio: str | None = None
connections: Connections connections: Connections
friend_count: int | None friend_count: int | None = None
distinguishment: Distinguishment | None distinguishment: Distinguishment | None = None
user: User user: User

View File

@@ -12,14 +12,14 @@ class EndContext(BaseModel):
zero: bool zero: bool
locked: bool locked: bool
prev: int prev: int
frameoffset: int | None frameoffset: int | None = None
class Clears(BaseModel): class Clears(BaseModel):
singles: int singles: int
doubles: int doubles: int
triples: int triples: int
quads: int quads: int
pentas: int | None pentas: int | None = None
realtspins: int realtspins: int
minitspins: int minitspins: int
minitspinsingles: int minitspinsingles: int
@@ -33,7 +33,7 @@ class EndContext(BaseModel):
class Garbage(BaseModel): class Garbage(BaseModel):
sent: int sent: int
received: int received: int
attack: int | None attack: int | None = None
cleared: int cleared: int
class Finesse(BaseModel): class Finesse(BaseModel):
@@ -46,18 +46,18 @@ class EndContext(BaseModel):
level_lines: int level_lines: int
level_lines_needed: int level_lines_needed: int
inputs: int inputs: int
holds: int | None holds: int | None = None
time: Time time: Time
score: int score: int
zenlevel: int | None zenlevel: int | None = None
zenprogress: int | None zenprogress: int | None = None
level: int level: int
combo: int combo: int
currentcombopower: int | None # WTF currentcombopower: int | None = None # WTF
topcombo: int topcombo: int
btb: int btb: int
topbtb: int topbtb: int
currentbtbchainpower: int | None # WTF * 2 currentbtbchainpower: int | None = None # WTF * 2
tspins: int tspins: int
piecesplaced: int piecesplaced: int
clears: Clears clears: Clears
@@ -79,7 +79,7 @@ class BaseModeRecord(BaseModel):
replayid: str replayid: str
user: User user: User
ts: datetime ts: datetime
ismulti: bool | None ismulti: bool | None = None
endcontext: EndContext endcontext: EndContext
class MultiRecord(BaseModel): class MultiRecord(BaseModel):
@@ -92,21 +92,19 @@ class BaseModeRecord(BaseModel):
replayid: str replayid: str
user: User user: User
ts: datetime ts: datetime
ismulti: bool | None ismulti: bool | None = None
endcontext: list[EndContext] endcontext: list[EndContext]
record: SoloRecord | MultiRecord | None record: SoloRecord | MultiRecord | None = None
rank: int | None rank: int | None = None
class SuccessModel(BaseSuccessModel): class SuccessModel(BaseSuccessModel):
class Data(BaseModel): class Data(BaseModel):
class Records(BaseModel): class Records(BaseModel):
class Sprint(BaseModeRecord): class Sprint(BaseModeRecord): ...
...
class Blitz(BaseModeRecord): class Blitz(BaseModeRecord): ...
...
sprint: Sprint = Field(..., alias='40l') sprint: Sprint = Field(..., alias='40l')
blitz: Blitz blitz: Blitz