♻️ 重构模板截图部分以解决导航导致的报错 (#553)

* ♻️ 把 path 放到数据模型里

* ♻️ 使用通用函数来生成模板图片

* 🎨 同步模板项目结构

* 🐛 修正导入路径
This commit is contained in:
呵呵です
2025-07-27 22:58:41 +08:00
committed by GitHub
parent fdbb2f3f6e
commit 65e7fed32b
29 changed files with 584 additions and 611 deletions

View File

@@ -1,3 +1,4 @@
from abc import abstractmethod
from datetime import datetime
from typing import Literal
@@ -8,6 +9,11 @@ from ...typedefs import Lang, Number
class Base(BaseModel):
@property
@abstractmethod
def path(self) -> str:
raise NotImplementedError
lang: Lang

View File

@@ -1,9 +1,16 @@
from typing import Literal
from typing_extensions import override
from .base import Base, People
class Bind(Base):
@property
@override
def path(self) -> str:
return 'v1/binding'
platform: Literal['TETR.IO', 'TOP', 'TOS']
type: Literal['success', 'unknown', 'unlink', 'unverified', 'error']
user: People

View File

@@ -1,9 +1,10 @@
from pydantic import BaseModel
from typing_extensions import override
from .......games.tetrio.api.typedefs import Rank
from ......typedefs import Number
from ....base import Base, People, Trending
from ...base import History
from ......games.tetrio.api.typedefs import Rank
from .....typedefs import Number
from ...base import Base, People, Trending
from ..base import History
class User(People):
@@ -45,6 +46,11 @@ class Singleplayer(BaseModel):
class Info(Base):
@property
@override
def path(self) -> str:
return 'v1/tetrio/info'
user: User
multiplayer: Multiplayer
singleplayer: Singleplayer

View File

@@ -1,6 +1,7 @@
from datetime import datetime
from pydantic import BaseModel
from typing_extensions import override
from ......games.tetrio.api.typedefs import ValidRank
from ...base import Base
@@ -13,5 +14,10 @@ class ItemData(BaseModel):
class Data(Base):
@property
@override
def path(self) -> str:
return 'v1/tetrio/rank'
items: dict[ValidRank, ItemData]
updated_at: datetime

View File

@@ -1,4 +1,5 @@
from pydantic import BaseModel
from typing_extensions import override
from .....typedefs import Number
from ...base import Base, People, Trending
@@ -14,6 +15,11 @@ class Data(BaseModel):
class Info(Base):
@property
@override
def path(self) -> str:
return 'v1/top/info'
user: People
today: Data
historical: Data

View File

@@ -1,4 +1,5 @@
from pydantic import BaseModel, Field
from typing_extensions import override
from .....typedefs import Number
from ...base import Base, People, Trending
@@ -37,6 +38,11 @@ class Singleplayer(BaseModel):
class Info(Base):
@property
@override
def path(self) -> str:
return 'v1/tos/info'
user: People
multiplayer: Multiplayer
singleplayer: Singleplayer

View File

@@ -1,6 +1,7 @@
from datetime import datetime
from pydantic import BaseModel
from typing_extensions import override
from .......games.tetrio.api.typedefs import ValidRank
from ......typedefs import Number
@@ -23,5 +24,10 @@ class ItemData(BaseModel):
class Data(Base):
@property
@override
def path(self) -> str:
return 'v2/tetrio/rank'
items: dict[ValidRank, ItemData]
updated_at: datetime

View File

@@ -1,6 +1,7 @@
from datetime import datetime
from pydantic import BaseModel
from typing_extensions import override
from .......games.tetrio.api.typedefs import ValidRank
from ......typedefs import Number
@@ -21,6 +22,11 @@ class SpecialData(BaseModel):
class Data(Base):
@property
@override
def path(self) -> str:
return 'v2/tetrio/rank/detail'
name: ValidRank
trending: Number
require_tr: Number

View File

@@ -1,3 +1,5 @@
from typing_extensions import override
from .base import Record as BaseRecord
from .base import Statistic as BaseStatistic
@@ -9,4 +11,9 @@ class Statistic(BaseStatistic):
class Record(BaseRecord):
@property
@override
def path(self) -> str:
return 'v2/tetrio/record/blitz'
statistic: Statistic

View File

@@ -1,7 +1,14 @@
from typing_extensions import override
from .base import Record as BaseRecord
from .base import Statistic
class Record(BaseRecord):
@property
@override
def path(self) -> str:
return 'v2/tetrio/record/sprint'
statistic: Statistic
time: str

View File

@@ -1,6 +1,7 @@
from datetime import datetime
from pydantic import BaseModel
from typing_extensions import override
from .....typedefs import Number
from ...base import Base
@@ -34,6 +35,11 @@ class Game(BaseModel):
class Data(Base):
@property
@override
def path(self) -> str:
return 'v2/tetrio/tetra-league'
replay_id: str
games: list[Game]
play_at: datetime

View File

@@ -2,6 +2,7 @@ from datetime import datetime
from typing import Literal
from pydantic import BaseModel
from typing_extensions import override
from .......games.tetrio.api.schemas.summaries.achievements import ArType, RankType
from .......games.tetrio.api.schemas.summaries.achievements import Rank as AchievementRank
@@ -132,6 +133,11 @@ class Zenith(BaseModel):
class Info(Base):
@property
@override
def path(self) -> str:
return 'v2/tetrio/user/info'
user: User
tetra_league: TetraLeague | None
zenith: Zenith | None

View File

@@ -1,4 +1,5 @@
from pydantic import BaseModel
from typing_extensions import override
from .......games.tetrio.api.typedefs import Rank
from ......typedefs import Number
@@ -34,5 +35,10 @@ class Data(BaseModel):
class List(Base):
@property
@override
def path(self) -> str:
return 'v2/tetrio/user/list'
show_index: bool
data: list[Data]