Skip to content

Commit e236655

Browse files
authored
Add support for fetching episodes of a show (#316)
1 parent 2aaee9a commit e236655

File tree

6 files changed

+1553
-1
lines changed

6 files changed

+1553
-1
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ repos:
7373
exclude: ^poetry\.lock$
7474
entry: poetry run codespell
7575
args:
76-
- --ignore-words-list=doen,te,ons,Racoon
76+
- --ignore-words-list=doen,te,ons,Racoon,Crate
7777
- id: detect-private-key
7878
name: 🕵️ Detect Private Keys
7979
language: system

src/spotifyaio/models.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,13 @@ class SimplifiedEpisode(DataClassORJSONMixin):
464464
description: str
465465

466466

467+
@dataclass
468+
class ShowEpisodesResponse(DataClassORJSONMixin):
469+
"""ShowEpisodes response model."""
470+
471+
items: list[SimplifiedEpisode]
472+
473+
467474
@dataclass
468475
class Episode(SimplifiedEpisode, Item):
469476
"""Episode model."""

src/spotifyaio/spotify.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@
4040
SavedTrack,
4141
SavedTrackResponse,
4242
Show,
43+
ShowEpisodesResponse,
4344
SimplifiedArtist,
45+
SimplifiedEpisode,
4446
TopArtistsResponse,
4547
TopTracksResponse,
4648
UserProfile,
@@ -318,6 +320,13 @@ async def get_saved_shows(self) -> list[SavedShow]:
318320
response = await self._get("v1/me/shows", params=params)
319321
return SavedShowResponse.from_json(response).items
320322

323+
async def get_show_episodes(self, show_id: str) -> list[SimplifiedEpisode]:
324+
"""Get show episodes."""
325+
identifier = show_id.split(":")[-1]
326+
params: dict[str, Any] = {"limit": 48}
327+
response = await self._get(f"v1/shows/{identifier}/episodes", params=params)
328+
return ShowEpisodesResponse.from_json(response).items
329+
321330
async def get_recently_played_tracks(self) -> list[PlayedTrack]:
322331
"""Get recently played tracks."""
323332
params: dict[str, Any] = {"limit": 48}

tests/__snapshots__/test_spotify.ambr

Lines changed: 624 additions & 0 deletions
Large diffs are not rendered by default.

tests/fixtures/show_episodes.json

Lines changed: 890 additions & 0 deletions
Large diffs are not rendered by default.

tests/test_spotify.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,3 +1070,25 @@ async def test_get_artist_albums(
10701070
params={"limit": 48},
10711071
data=None,
10721072
)
1073+
1074+
1075+
async def test_get_show_episodes(
1076+
responses: aioresponses,
1077+
snapshot: SnapshotAssertion,
1078+
authenticated_client: SpotifyClient,
1079+
) -> None:
1080+
"""Test retrieving episodes of a show."""
1081+
responses.get(
1082+
f"{SPOTIFY_URL}/v1/shows/0e30iIgSffe6xJhFKe35Db/episodes?limit=48",
1083+
status=200,
1084+
body=load_fixture("show_episodes.json"),
1085+
)
1086+
response = await authenticated_client.get_show_episodes("0e30iIgSffe6xJhFKe35Db")
1087+
assert response == snapshot
1088+
responses.assert_called_once_with(
1089+
f"{SPOTIFY_URL}/v1/shows/0e30iIgSffe6xJhFKe35Db/episodes",
1090+
METH_GET,
1091+
headers=HEADERS,
1092+
params={"limit": 48},
1093+
data=None,
1094+
)

0 commit comments

Comments
 (0)