def watch_tv_show_season_task(watch_tv_season_id: int): processor = WatchTVSeasonProcessor(watch_media_id=watch_tv_season_id) success = processor.fetch() # delete watch_tv_season and fallback to individual episodes if not success: watch_tv_season = get_object_or_404(WatchTVSeason, pk=watch_tv_season_id) logging.info('Failed fetching season {} - falling back to individual episodes'.format(watch_tv_season)) nefarious_settings = NefariousSettings.get() tmdb = get_tmdb_client(nefarious_settings) season_request = tmdb.TV_Seasons(watch_tv_season.watch_tv_show.tmdb_show_id, watch_tv_season.season_number) season = season_request.info() # save individual episode watches watch_tv_episodes_tasks = [] for episode in season['episodes']: watch_tv_episode, was_created = WatchTVEpisode.objects.get_or_create( user=watch_tv_season.user, watch_tv_show=watch_tv_season.watch_tv_show, tmdb_episode_id=episode['id'], season_number=watch_tv_season.season_number, episode_number=episode['episode_number'], ) # build list of tasks to execute watch_tv_episodes_tasks.append(watch_tv_episode_task.si(watch_tv_episode.id)) # remove the "watch season" now that we've requested to fetch all individual episodes watch_tv_season.delete() # execute tasks sequentially chain(*watch_tv_episodes_tasks)()
def watch_tv_show_season_task(watch_tv_season_id: int): processor = WatchTVSeasonProcessor(watch_media_id=watch_tv_season_id) success = processor.fetch() watch_tv_season = get_object_or_404(WatchTVSeason, pk=watch_tv_season_id) # success so update the season request instance as "collected" if success: season_request = WatchTVSeasonRequest.objects.filter( watch_tv_show=watch_tv_season.watch_tv_show, season_number=watch_tv_season.season_number) if season_request.exists(): season_request = season_request.first() season_request.collected = True season_request.save() # failed so delete season instance and fallback to trying individual episodes else: logging.info( 'Failed fetching entire season {} - falling back to individual episodes' .format(watch_tv_season)) nefarious_settings = NefariousSettings.get() tmdb = get_tmdb_client(nefarious_settings) season_request = tmdb.TV_Seasons( watch_tv_season.watch_tv_show.tmdb_show_id, watch_tv_season.season_number) season = season_request.info() # save individual episode watches watch_tv_episodes_tasks = [] for episode in season['episodes']: watch_tv_episode, was_created = WatchTVEpisode.objects.get_or_create( tmdb_episode_id=episode['id'], # add non-unique constraint fields for the default values defaults=dict( user=watch_tv_season.user, watch_tv_show=watch_tv_season.watch_tv_show, season_number=watch_tv_season.season_number, episode_number=episode['episode_number'], release_date=parse_date(episode.get('air_date') or ''), )) # build list of tasks to execute watch_tv_episodes_tasks.append( watch_tv_episode_task.si(watch_tv_episode.id)) # remove the "watch season" now that we've requested to fetch all individual episodes watch_tv_season.delete() # execute tasks sequentially chain(*watch_tv_episodes_tasks)()