Compare commits

..

5 Commits

Author SHA1 Message Date
fa89e49f29 Merge pull request 'Полный релиз 1.0.0' (#5) from dev into latest
All checks were successful
Build And Publish Package / publish (push) Successful in 28s
Reviewed-on: #5
2026-04-02 07:59:52 +03:00
3d1cf6bb4d Merge pull request '0.2.2' (#4) from dev into latest
All checks were successful
Build And Publish Package / publish (push) Successful in 31s
Reviewed-on: #4
2026-03-08 21:49:49 +03:00
de37fcb5fa Merge pull request '1.2.1' (#3) from dev into latest
All checks were successful
Build And Publish Package / publish (push) Successful in 32s
Reviewed-on: #3
2026-03-08 17:56:38 +03:00
0640ab9242 Merge pull request '0.2.0' (#2) from dev into latest
All checks were successful
Build And Publish Package / publish (push) Successful in 33s
Reviewed-on: #2
2026-03-08 10:14:35 +03:00
b921cf9138 Merge pull request '0.1.1' (#1) from dev into latest
All checks were successful
Build And Publish Package / publish (push) Successful in 31s
Reviewed-on: #1
2026-03-08 08:06:46 +03:00
2 changed files with 10 additions and 31 deletions

View File

@ -1,6 +1,6 @@
[project] [project]
name = "oxidespotify" name = "oxidespotify"
version = "1.0.2" version = "1.0.0"
description = "Client for Spotify API" description = "Client for Spotify API"
readme = "README.md" readme = "README.md"
authors = [{ name = "Miwory", email = "miwory.uwu@gmail.com" }] authors = [{ name = "Miwory", email = "miwory.uwu@gmail.com" }]

View File

@ -1,13 +1,7 @@
from datetime import date, datetime from datetime import datetime
from typing import Annotated, Literal from typing import Literal
from pydantic import ( from pydantic import BaseModel, HttpUrl, RootModel, field_validator
BaseModel,
BeforeValidator,
HttpUrl,
RootModel,
field_validator,
)
class Error(Exception): class Error(Exception):
@ -28,21 +22,6 @@ class InternalError(Error):
pass pass
def normalize_spotify_date(v: str) -> str:
parts = v.split('-')
if len(parts) == 1:
return f'{v}-01-01'
if len(parts) == 2:
return f'{v}-01'
return v
PrecisionedReleaseDate = Annotated[
date, BeforeValidator(normalize_spotify_date)
]
class Token(BaseModel): class Token(BaseModel):
token_type: Literal['Bearer'] token_type: Literal['Bearer']
access_token: str access_token: str
@ -93,8 +72,8 @@ class Paginated(BaseModel):
limit: int limit: int
next: HttpUrl | None next: HttpUrl | None
offset: int = 0 offset: int = 0
previous: HttpUrl | None = None previous: HttpUrl | None
total: int = 0 total: int
class ExternalUrls(BaseModel): class ExternalUrls(BaseModel):
@ -155,7 +134,7 @@ class BaseAlbum(BaseModel):
id: str id: str
images: list[Image] images: list[Image]
name: str name: str
release_date: PrecisionedReleaseDate release_date: datetime
release_date_precision: Literal['year', 'month', 'day'] release_date_precision: Literal['year', 'month', 'day']
restrictions: Restriction | None = None restrictions: Restriction | None = None
type: Literal['album'] type: Literal['album']
@ -227,7 +206,7 @@ class AudioBookChapter(BaseModel):
is_playable: bool is_playable: bool
languages: list[str] languages: list[str]
name: str name: str
release_date: PrecisionedReleaseDate release_date: datetime
release_date_precision: Literal['year', 'month', 'day'] release_date_precision: Literal['year', 'month', 'day']
resume_point: ResumePoint resume_point: ResumePoint
type: Literal['episode'] type: Literal['episode']
@ -308,7 +287,7 @@ class Devices(BaseModel):
class RecentlyPlayedTrack(BaseModel): class RecentlyPlayedTrack(BaseModel):
track: Track track: Track
played_at: datetime played_at: datetime
context: Context | None = None context: Context
class RecentlyPlayedTracks(Paginated): class RecentlyPlayedTracks(Paginated):
@ -344,7 +323,7 @@ class PlaylistTracks(Paginated):
class SimplifiedPlaylistTracks(Paginated): class SimplifiedPlaylistTracks(Paginated):
href: HttpUrl href: HttpUrl
total: int = 0 total: int
class Playlist(BaseModel): class Playlist(BaseModel):