From 8b2790b873cfdbd445daf915e38361f850c82b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:59:45 +0200 Subject: [PATCH 1/6] Overwrite episodes after TVSeason creation --- trakt/tv.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/trakt/tv.py b/trakt/tv.py index ed1653b..7f7086d 100644 --- a/trakt/tv.py +++ b/trakt/tv.py @@ -433,10 +433,11 @@ def seasons(self): episode = TVEpisode(show=self.title, show_id=self.trakt, **ep) episodes.append(episode) - season['episodes'] = episodes number = season.pop('number') season = TVSeason(self.title, number, self.slug, **season) + season._episodes = episodes + self._seasons.append(season) yield self._seasons From 8bb0a304713367250c567a75a7c0e624e1e86cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:54:04 +0200 Subject: [PATCH 2/6] Add show_id to TVSeason initializer --- trakt/tv.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/trakt/tv.py b/trakt/tv.py index 7f7086d..9c9c845 100644 --- a/trakt/tv.py +++ b/trakt/tv.py @@ -558,9 +558,10 @@ def __str__(self): class TVSeason(IdsMixin): """Container for TV Seasons""" - def __init__(self, show, season=1, slug=None, **kwargs): + def __init__(self, show, season=1, slug=None, show_id=None, **kwargs): super().__init__() self.show = show + self.show_id = show_id self.season = season self.slug = slug or slugify(show) self._episodes = self._comments = self._ratings = None From e4d3524030d7548c7df9df5d49820d4eacad8bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:46:02 +0200 Subject: [PATCH 3/6] TVShow: build _seasons if seasons provided in construct --- trakt/tv.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/trakt/tv.py b/trakt/tv.py index 9c9c845..7def1bf 100644 --- a/trakt/tv.py +++ b/trakt/tv.py @@ -201,23 +201,32 @@ def anticipated_shows(page=1, limit=10, extended=None): class TVShow(IdsMixin): """A Class representing a TV Show object.""" - def __init__(self, title='', slug=None, **kwargs): + def __init__(self, title='', slug=None, seasons=None, **kwargs): super().__init__() self.media_type = 'shows' self.top_watchers = self.top_episodes = self.year = None self.genres = self.certification = self.network = None self._aliases = self._comments = None self._images = self._people = self._ratings = self._translations = None - self._seasons = None self._last_episode = self._next_episode = None self._slug = slug self.title = title + self._seasons = self._build_seasons(seasons) if seasons else None if len(kwargs) > 0: self._build(kwargs) else: self._get() + def _build_seasons(self, seasons_data): + seasons = [] + show_id = self.trakt + for season_data in seasons_data: + number = season_data.pop('number') + season = TVSeason(show=self.title, season=number, show_id=show_id, **season_data) + seasons.append(season) + return seasons + @property def slug(self): if self._ids.get('slug', None) is not None: From d632113962f48fbee6aea46b6cd9b260718e0b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:55:33 +0200 Subject: [PATCH 4/6] TVSeason: build _episodes if episodes provided in construct --- trakt/tv.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/trakt/tv.py b/trakt/tv.py index 7def1bf..e6291a8 100644 --- a/trakt/tv.py +++ b/trakt/tv.py @@ -567,20 +567,29 @@ def __str__(self): class TVSeason(IdsMixin): """Container for TV Seasons""" - def __init__(self, show, season=1, slug=None, show_id=None, **kwargs): + def __init__(self, show, season=1, slug=None, episodes=None, show_id=None, **kwargs): super().__init__() self.show = show self.show_id = show_id self.season = season self.slug = slug or slugify(show) - self._episodes = self._comments = self._ratings = None - self.ext = 'shows/{id}/seasons/{season}'.format(id=self.slug, - season=season) - if len(kwargs) > 0: + self.ext = 'shows/{id}/seasons/{season}'.format(id=self.slug, season=season) + self._comments = self._ratings = None + self._episodes = self._build_episodes(episodes) if episodes else None + + if len(kwargs) > 0 or episodes: self._build(kwargs) else: self._get() + def _build_episodes(self, episodes_data): + episodes = [] + for episode_data in episodes_data: + season = episode_data.get('season', self.season) + episode = TVEpisode(show=self.show, season=season, show_id=self.show_id, **episode_data) + episodes.append(episode) + return episodes + @get def _get(self): """Handle getting this :class:`TVSeason`'s data from trakt and building From ab5ea09eae1fc37c252958472e1df7c93a645d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:39:36 +0200 Subject: [PATCH 5/6] Refactor: show_collection rename variables to be readable --- trakt/users.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/trakt/users.py b/trakt/users.py index 27f7f14..da61b28 100644 --- a/trakt/users.py +++ b/trakt/users.py @@ -370,13 +370,14 @@ def show_collection(self): ext = 'users/{username}/collection/shows?extended=metadata' data = yield ext.format(username=slugify(self.username)) self._show_collection = [] - for show in data: - s = show.pop('show') - sh = TVShow(**s) - sh._seasons = [TVSeason(show=sh.title, - season=sea['number'], **sea) - for sea in show.pop('seasons')] - self._show_collection.append(sh) + for show_data in data: + show_item = show_data.pop('show') + show = TVShow(**show_item) + show._seasons = [ + TVSeason(show=show.title, season=sea['number'], **sea) + for sea in show_data.pop('seasons') + ] + self._show_collection.append(show) yield self._show_collection @property From 119e0fb18871137caff523042ab147ac26c2f442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 14 Jan 2023 23:56:31 +0200 Subject: [PATCH 6/6] Refactor: show_collection: Pass all data to TVShow() Let TVShow handle creating TVSeason and TVSeason and TVEpisode chain --- trakt/users.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/trakt/users.py b/trakt/users.py index da61b28..4e308d7 100644 --- a/trakt/users.py +++ b/trakt/users.py @@ -373,10 +373,6 @@ def show_collection(self): for show_data in data: show_item = show_data.pop('show') show = TVShow(**show_item) - show._seasons = [ - TVSeason(show=show.title, season=sea['number'], **sea) - for sea in show_data.pop('seasons') - ] self._show_collection.append(show) yield self._show_collection