diff --git a/src/osuclient/api.py b/src/osuclient/api.py index b68de66..5737305 100644 --- a/src/osuclient/api.py +++ b/src/osuclient/api.py @@ -47,9 +47,9 @@ class osuAPIClient(AioHTTPXClient): case _: raise s.Error(500, 'Internal Server Error') - async def get_score(self, access_token: str, score_id: int): + async def get_score(self, access_token: str, mode: str, score_id: int): req = await self.get( - f'/scores/{score_id}', + f'/scores/{mode}/{score_id}', headers=self.clean_dict( { 'Authorization': f'Bearer {access_token}', diff --git a/src/osuclient/schema.py b/src/osuclient/schema.py index 2a71b6d..a7fc26d 100644 --- a/src/osuclient/schema.py +++ b/src/osuclient/schema.py @@ -34,7 +34,7 @@ class Country(BaseModel): class Cover(BaseModel): model_config = ConfigDict(extra='forbid') - custom_url: str + custom_url: str | None url: str id: int | None @@ -211,38 +211,6 @@ class Covers(BaseModel): slimcover_2x: str = Field(..., alias='slimcover@2x') -class Beatmap(BaseModel): - model_config = ConfigDict(extra='forbid') - - beatmapset_id: int - difficulty_rating: float - id: int - mode: str - status: str - total_length: int - user_id: int - version: str - accuracy: float - ar: float - bpm: float - convert: bool - count_circles: int - count_sliders: int - count_spinners: int - cs: float - deleted_at: datetime | None - drain: float - hit_length: int - is_scoreable: bool - last_updated: str - mode_int: int - passcount: int - playcount: int - ranked: int - url: str - checksum: str - - class Beatmapset(BaseModel): model_config = ConfigDict(extra='forbid') @@ -284,8 +252,12 @@ class User(BaseModel): is_supporter: bool last_visit: datetime | None pm_friends_only: bool - profile_colour: None + profile_colour: str | None username: str + country: Country | None = None + team: Team | None = None + cover: Cover | None = None + groups: list[str] | None = None class Weight(BaseModel): @@ -353,13 +325,48 @@ class BeatmapFailtimes(BaseModel): exit: list[int] +class Beatmap(BaseModel): + model_config = ConfigDict(extra='forbid') + + beatmapset_id: int + difficulty_rating: float + id: int + mode: str + status: str + total_length: int + user_id: int + version: str + accuracy: float + ar: float + bpm: float + convert: bool + count_circles: int + count_sliders: int + count_spinners: int + cs: float + deleted_at: datetime | None + drain: float + hit_length: int + is_scoreable: bool + last_updated: str + mode_int: int + passcount: int + playcount: int + ranked: int + url: str + checksum: str + max_combo: int | None = None + owners: list[BeatmapOwner] | None = None + user: User | None = None + + class BeatmapExtended(Beatmap): model_config = ConfigDict(extra='forbid') beatmapset: BeatmapsetExtended - max_combo: int + max_combo: int # type: ignore current_user_playcount: int - owners: list[BeatmapOwner] + owners: list[BeatmapOwner] # type: ignore failtimes: BeatmapFailtimes @@ -388,6 +395,7 @@ class Score(BaseModel): beatmapset: Beatmapset user: User weight: Weight | None = None + rank_global: int | None = None class GetUser(User): @@ -411,8 +419,8 @@ class GetUser(User): title_url: None twitter: str | None website: str | None - country: Country - cover: Cover + country: Country # type: ignore + cover: Cover # type: ignore kudosu: Kudosu account_history: list[str] active_tournament_banner: ActiveTournamentBanner | None @@ -425,7 +433,7 @@ class GetUser(User): favourite_beatmapset_count: int follower_count: int graveyard_beatmapset_count: int - groups: list[str] + groups: list[str] # type: ignore guest_beatmapset_count: int loved_beatmapset_count: int mapping_follower_count: int @@ -443,7 +451,6 @@ class GetUser(User): scores_recent_count: int statistics: UserStatistics support_level: int - team: Team | None user_achievements: list[UserAchievement] rank_history: RankHistory rankHistory: RankHistory