This commit is contained in:
2023-05-31 19:31:00 +08:00
commit d16c25726a
10 changed files with 745 additions and 0 deletions

View File

@ -0,0 +1,157 @@
from dataclasses import dataclass, asdict
from typing import Optional
@dataclass
class DbChartRow:
song_id: str
rating_class: int
name_en: str
name_jp: Optional[str]
artist: str
bpm: str
bpm_base: float
package_id: str
time: Optional[int]
side: int
world_unlock: bool
remote_download: Optional[bool]
bg: str
date: int
version: str
difficulty: int
rating: int
note: int
chart_designer: Optional[str]
jacket_designer: Optional[str]
jacket_override: bool
audio_override: bool
@dataclass(kw_only=True)
class Chart:
song_id: str
rating_class: int
name_en: str
name_jp: Optional[str]
artist: str
bpm: str
bpm_base: float
package_id: str
time: Optional[int]
side: int
world_unlock: bool
remote_download: Optional[bool]
bg: str
date: int
version: str
difficulty: int
rating: int
note: int
chart_designer: Optional[str]
jacket_designer: Optional[str]
jacket_override: bool
audio_override: bool
@classmethod
def from_db_row(cls, row: DbChartRow):
return cls(**asdict(row))
@dataclass
class DbAliasRow:
song_id: str
alias: str
@dataclass(kw_only=True)
class Alias:
song_id: str
alias: str
@classmethod
def from_db_row(cls, row: DbAliasRow):
return cls(song_id=row.song_id, alias=row.alias)
@dataclass
class DbPackageRow:
package_id: str
name: str
@dataclass(kw_only=True)
class Package:
id: str
name: str
@classmethod
def from_db_row(cls, row: DbPackageRow):
return cls(id=row.package_id, name=row.name)
@dataclass
class DbScoreRow:
song_id: str
rating_class: int
score: int
pure: int
far: int
lost: int
time: int
max_recall: Optional[int] = None
@dataclass(kw_only=True)
class Score:
song_id: str
rating_class: int
score: int
pure: int
far: int
lost: int
time: int
max_recall: Optional[int] = None
@classmethod
def from_db_row(cls, row: DbScoreRow):
return cls(**asdict(row))
def to_db_row(self):
keys = list(self.__dataclass_fields__)
values = [self.__getattribute__(key) for key in keys]
return DbChartRow(*values)
@dataclass
class DbCaculatedRow:
song_id: str
rating_class: int
score: int
pure: int
far: int
lost: int
time: int
rating: int
note: int
pure_small: int
potential: float
@dataclass(kw_only=True)
class Caculated:
song_id: str
rating_class: int
score: int
pure: int
far: int
lost: int
time: int
rating: int
note: int
pure_small: int
potential: float
@classmethod
def from_db_row(cls, row: DbCaculatedRow):
return cls(**asdict(row))