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]
name = "oxidespotify"
version = "1.0.2"
version = "1.0.0"
description = "Client for Spotify API"
readme = "README.md"
authors = [{ name = "Miwory", email = "miwory.uwu@gmail.com" }]

View File

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