fix(database): fix pydantic warnings
This commit is contained in:
@@ -7,7 +7,7 @@ from app.models.score import MODE_TO_INT, GameMode
|
|||||||
from .beatmap_playcounts import BeatmapPlaycounts
|
from .beatmap_playcounts import BeatmapPlaycounts
|
||||||
from .beatmapset import Beatmapset, BeatmapsetResp
|
from .beatmapset import Beatmapset, BeatmapsetResp
|
||||||
|
|
||||||
from sqlalchemy import DECIMAL, Column, DateTime
|
from sqlalchemy import Column, DateTime
|
||||||
from sqlmodel import VARCHAR, Field, Relationship, SQLModel, col, func, select
|
from sqlmodel import VARCHAR, Field, Relationship, SQLModel, col, func, select
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
@@ -27,9 +27,7 @@ class BeatmapBase(SQLModel):
|
|||||||
url: str
|
url: str
|
||||||
mode: GameMode
|
mode: GameMode
|
||||||
beatmapset_id: int = Field(foreign_key="beatmapsets.id", index=True)
|
beatmapset_id: int = Field(foreign_key="beatmapsets.id", index=True)
|
||||||
difficulty_rating: float = Field(
|
difficulty_rating: float = Field(default=0.0)
|
||||||
default=0.0, sa_column=Column(DECIMAL(precision=10, scale=6))
|
|
||||||
)
|
|
||||||
total_length: int
|
total_length: int
|
||||||
user_id: int
|
user_id: int
|
||||||
version: str
|
version: str
|
||||||
@@ -41,17 +39,11 @@ class BeatmapBase(SQLModel):
|
|||||||
# TODO: failtimes, owners
|
# TODO: failtimes, owners
|
||||||
|
|
||||||
# BeatmapExtended
|
# BeatmapExtended
|
||||||
ar: float = Field(default=0.0, sa_column=Column(DECIMAL(precision=10, scale=2)))
|
ar: float = Field(default=0.0)
|
||||||
cs: float = Field(default=0.0, sa_column=Column(DECIMAL(precision=10, scale=2)))
|
cs: float = Field(default=0.0)
|
||||||
drain: float = Field(
|
drain: float = Field(default=0.0) # hp
|
||||||
default=0.0,
|
accuracy: float = Field(default=0.0) # od
|
||||||
sa_column=Column(DECIMAL(precision=10, scale=2)),
|
bpm: float = Field(default=0.0)
|
||||||
) # hp
|
|
||||||
accuracy: float = Field(
|
|
||||||
default=0.0,
|
|
||||||
sa_column=Column(DECIMAL(precision=10, scale=2)),
|
|
||||||
) # od
|
|
||||||
bpm: float = Field(default=0.0, sa_column=Column(DECIMAL(precision=10, scale=2)))
|
|
||||||
count_circles: int = Field(default=0)
|
count_circles: int = Field(default=0)
|
||||||
count_sliders: int = Field(default=0)
|
count_sliders: int = Field(default=0)
|
||||||
count_spinners: int = Field(default=0)
|
count_spinners: int = Field(default=0)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import TYPE_CHECKING, TypedDict, cast
|
from typing import TYPE_CHECKING, NotRequired, TypedDict
|
||||||
|
|
||||||
from app.models.beatmap import BeatmapRankStatus, Genre, Language
|
from app.models.beatmap import BeatmapRankStatus, Genre, Language
|
||||||
from app.models.score import GameMode
|
from app.models.score import GameMode
|
||||||
|
|
||||||
from .lazer_user import BASE_INCLUDES, User, UserResp
|
from .lazer_user import BASE_INCLUDES, User, UserResp
|
||||||
|
|
||||||
from pydantic import BaseModel, model_serializer
|
from pydantic import BaseModel
|
||||||
from sqlalchemy import DECIMAL, JSON, Column, DateTime, Text
|
from sqlalchemy import JSON, Column, DateTime, Text
|
||||||
from sqlalchemy.ext.asyncio import AsyncAttrs
|
from sqlalchemy.ext.asyncio import AsyncAttrs
|
||||||
from sqlmodel import Field, Relationship, SQLModel, col, func, select
|
from sqlmodel import Field, Relationship, SQLModel, col, func, select
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
@@ -19,41 +19,19 @@ if TYPE_CHECKING:
|
|||||||
from .favourite_beatmapset import FavouriteBeatmapset
|
from .favourite_beatmapset import FavouriteBeatmapset
|
||||||
|
|
||||||
|
|
||||||
class BeatmapCovers(SQLModel):
|
BeatmapCovers = TypedDict(
|
||||||
cover: str
|
"BeatmapCovers",
|
||||||
card: str
|
{
|
||||||
list: str
|
"cover": str,
|
||||||
slimcover: str
|
"card": str,
|
||||||
cover_2_x: str | None = Field(default=None, alias="cover@2x")
|
"list": str,
|
||||||
card_2_x: str | None = Field(default=None, alias="card@2x")
|
"slimcover": str,
|
||||||
list_2_x: str | None = Field(default=None, alias="list@2x")
|
"cover@2x": NotRequired[str | None],
|
||||||
slimcover_2_x: str | None = Field(default=None, alias="slimcover@2x")
|
"card@2x": NotRequired[str | None],
|
||||||
|
"list@2x": NotRequired[str | None],
|
||||||
@model_serializer
|
"slimcover@2x": NotRequired[str | None],
|
||||||
def _(self) -> dict[str, str | None]:
|
},
|
||||||
self = cast(dict[str, str | None] | BeatmapCovers, self)
|
)
|
||||||
if isinstance(self, dict):
|
|
||||||
return {
|
|
||||||
"cover": self["cover"],
|
|
||||||
"card": self["card"],
|
|
||||||
"list": self["list"],
|
|
||||||
"slimcover": self["slimcover"],
|
|
||||||
"cover@2x": self.get("cover@2x"),
|
|
||||||
"card@2x": self.get("card@2x"),
|
|
||||||
"list@2x": self.get("list@2x"),
|
|
||||||
"slimcover@2x": self.get("slimcover@2x"),
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
return {
|
|
||||||
"cover": self.cover,
|
|
||||||
"card": self.card,
|
|
||||||
"list": self.list,
|
|
||||||
"slimcover": self.slimcover,
|
|
||||||
"cover@2x": self.cover_2_x,
|
|
||||||
"card@2x": self.card_2_x,
|
|
||||||
"list@2x": self.list_2_x,
|
|
||||||
"slimcover@2x": self.slimcover_2_x,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class BeatmapHype(BaseModel):
|
class BeatmapHype(BaseModel):
|
||||||
@@ -75,12 +53,12 @@ class BeatmapNomination(TypedDict):
|
|||||||
beatmapset_id: int
|
beatmapset_id: int
|
||||||
reset: bool
|
reset: bool
|
||||||
user_id: int
|
user_id: int
|
||||||
rulesets: list[GameMode] | None
|
rulesets: NotRequired[list[GameMode] | None]
|
||||||
|
|
||||||
|
|
||||||
class BeatmapDescription(SQLModel):
|
class BeatmapDescription(TypedDict):
|
||||||
bbcode: str | None = None
|
bbcode: NotRequired[str | None]
|
||||||
description: str | None = None
|
description: NotRequired[str | None]
|
||||||
|
|
||||||
|
|
||||||
class BeatmapTranslationText(BaseModel):
|
class BeatmapTranslationText(BaseModel):
|
||||||
@@ -122,7 +100,7 @@ class BeatmapsetBase(SQLModel):
|
|||||||
track_id: int | None = Field(default=None) # feature artist?
|
track_id: int | None = Field(default=None) # feature artist?
|
||||||
|
|
||||||
# BeatmapsetExtended
|
# BeatmapsetExtended
|
||||||
bpm: float = Field(default=0.0, sa_column=Column(DECIMAL(10, 2)))
|
bpm: float = Field(default=0.0)
|
||||||
can_be_hyped: bool = Field(default=False)
|
can_be_hyped: bool = Field(default=False)
|
||||||
discussion_locked: bool = Field(default=False)
|
discussion_locked: bool = Field(default=False)
|
||||||
last_updated: datetime = Field(sa_column=Column(DateTime))
|
last_updated: datetime = Field(sa_column=Column(DateTime))
|
||||||
|
|||||||
@@ -528,9 +528,7 @@ class MultiplayerQueue:
|
|||||||
|
|
||||||
item.validate_playlist_item_mods()
|
item.validate_playlist_item_mods()
|
||||||
item.owner_id = user.user_id
|
item.owner_id = user.user_id
|
||||||
item.star_rating = float(
|
item.star_rating = beatmap.difficulty_rating
|
||||||
beatmap.difficulty_rating
|
|
||||||
) # FIXME: beatmap use decimal
|
|
||||||
await Playlist.add_to_db(item, self.room.room_id, session)
|
await Playlist.add_to_db(item, self.room.room_id, session)
|
||||||
self.room.playlist.append(item)
|
self.room.playlist.append(item)
|
||||||
await self.hub.playlist_added(self.server_room, item)
|
await self.hub.playlist_added(self.server_room, item)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import NotRequired, TypedDict
|
||||||
|
|
||||||
from .model import UTCBaseModel
|
from .model import UTCBaseModel
|
||||||
|
|
||||||
@@ -83,9 +84,9 @@ class RankHistory(BaseModel):
|
|||||||
data: list[int]
|
data: list[int]
|
||||||
|
|
||||||
|
|
||||||
class Page(BaseModel):
|
class Page(TypedDict):
|
||||||
html: str = ""
|
html: NotRequired[str]
|
||||||
raw: str = ""
|
raw: NotRequired[str]
|
||||||
|
|
||||||
|
|
||||||
class BeatmapsetType(str, Enum):
|
class BeatmapsetType(str, Enum):
|
||||||
|
|||||||
Reference in New Issue
Block a user