def episode_detail(self, episode_id): session = SessionManager.Session() try: (episode, bangumi) = session.query(Episode, Bangumi).\ join(Bangumi).\ filter(Episode.id == episode_id).one() episode_dict = row2dict(episode) episode_dict['bangumi'] = row2dict(bangumi) episode_dict['thumbnail'] = utils.generate_thumbnail_link( episode, bangumi) if episode.status == Episode.STATUS_DOWNLOADED: episode_dict['videos'] = [] torrent_file_cur = session.query(TorrentFile).filter( TorrentFile.episode_id == episode_id) for torrent_file in torrent_file_cur: episode_dict['videos'].append( utils.generate_video_link(str(bangumi.id), torrent_file.file_path)) return json_resp(episode_dict) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) except Exception as error: raise error finally: SessionManager.Session.remove()
def get_bangumi(self, id): try: session = SessionManager.Session() bangumi = session.query(Bangumi).options(joinedload(Bangumi.episodes)).\ filter(Bangumi.id == id).\ filter(Bangumi.delete_mark == None).\ one() episodes = [] for episode in bangumi.episodes: if episode.delete_mark is not None: continue eps = row2dict(episode) eps['thumbnail'] = utils.generate_thumbnail_link( episode, bangumi) episodes.append(eps) bangumi_dict = row2dict(bangumi) bangumi_dict['episodes'] = episodes bangumi_dict['cover'] = utils.generate_cover_link(bangumi) return json_resp({'data': bangumi_dict}) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) except Exception as exception: raise exception finally: SessionManager.Session.remove()
def recent_update(self, days): current = datetime.now() # from one week ago start_time = current - timedelta(days=days) session = SessionManager.Session() try: result = session.query(Episode, Bangumi).\ join(Bangumi).\ filter(Episode.status == Episode.STATUS_DOWNLOADED).\ filter(Episode.update_time >= start_time).\ filter(Episode.update_time <= current).\ order_by(desc(Episode.update_time)) episode_list = [] for eps, bgm in result: episode = row2dict(eps) episode['thumbnail'] = utils.generate_thumbnail_link(eps, bgm) episode['bangumi'] = row2dict(bgm) episode['bangumi']['cover'] = utils.generate_cover_link(bgm) episode_list.append(episode) return json_resp({'data': episode_list}) except Exception as error: raise error finally: SessionManager.Session.remove()
def get_bangumi(self, id): try: session = SessionManager.Session() bangumi = session.query(Bangumi).options(joinedload(Bangumi.episodes)).filter(Bangumi.id == id).one() episodes = [] for episode in bangumi.episodes: eps = row2dict(episode) eps['thumbnail'] = utils.generate_thumbnail_link(episode, bangumi) episodes.append(eps) bangumi_dict = row2dict(bangumi) bangumi_dict['episodes'] = episodes bangumi_dict['cover'] = utils.generate_cover_link(bangumi) return json_resp({'data': bangumi_dict}) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) except Exception as exception: raise exception finally: SessionManager.Session.remove()
def get_bangumi(self, id, user_id): try: session = SessionManager.Session() bangumi = session.query(Bangumi).\ options(joinedload(Bangumi.episodes).joinedload(Episode.thumbnail_image)).\ options(joinedload(Bangumi.cover_image)).\ filter(Bangumi.delete_mark == None).\ filter(Bangumi.id == id).\ one() favorite = session.query(Favorites).\ filter(Favorites.bangumi_id == id).\ filter(Favorites.user_id == user_id).\ first() watch_progress_list = session.query(WatchProgress).\ filter(WatchProgress.bangumi_id == bangumi.id).\ filter(WatchProgress.user_id == user_id).\ all() episodes = [] watch_progress_hash_table = {} for watch_progress in watch_progress_list: watch_progress_dict = row2dict(watch_progress) watch_progress_hash_table[ watch_progress.episode_id] = watch_progress_dict for episode in bangumi.episodes: if episode.delete_mark is not None: continue eps = row2dict(episode) eps['thumbnail'] = utils.generate_thumbnail_link( episode, bangumi) utils.process_episode_dict(episode, eps) if episode.id in watch_progress_hash_table: eps['watch_progress'] = watch_progress_hash_table[ episode.id] episodes.append(eps) bangumi_dict = row2dict(bangumi) if favorite is not None: bangumi_dict['favorite_status'] = favorite.status bangumi_dict['episodes'] = episodes bangumi_dict['cover'] = utils.generate_cover_link(bangumi) utils.process_bangumi_dict(bangumi, bangumi_dict) return json_resp({'data': bangumi_dict}) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) finally: SessionManager.Session.remove()
def episode_detail(self, episode_id, user_id): session = SessionManager.Session() try: (episode, bangumi) = session.query(Episode, Bangumi).\ join(Bangumi).\ options(joinedload(Bangumi.cover_image)).\ options(joinedload(Episode.thumbnail_image)).\ filter(Episode.delete_mark == None).\ filter(Episode.id == episode_id).\ one() watch_progress = session.query(WatchProgress).\ filter(WatchProgress.episode_id == episode_id).\ filter(WatchProgress.user_id == user_id).\ first() episode_dict = row2dict(episode) episode_dict['bangumi'] = row2dict(bangumi) episode_dict['bangumi']['cover'] = utils.generate_cover_link( bangumi) utils.process_bangumi_dict(bangumi, episode_dict['bangumi']) episode_dict['thumbnail'] = utils.generate_thumbnail_link( episode, bangumi) utils.process_episode_dict(episode, episode_dict) if watch_progress is not None: episode_dict['watch_progress'] = row2dict(watch_progress) if episode.status == Episode.STATUS_DOWNLOADED: episode_dict['video_files'] = [] video_file_list = session.query(VideoFile).filter( VideoFile.episode_id == episode_id).all() for video_file in video_file_list: video_file_dict = row2dict(video_file) video_file_dict['url'] = utils.generate_video_link( str(bangumi.id), video_file.file_path) episode_dict['video_files'].append(video_file_dict) return json_resp(episode_dict) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) finally: SessionManager.Session.remove()
def episode_detail(self, episode_id): session = SessionManager.Session() try: (episode, bangumi) = session.query(Episode, Bangumi).\ join(Bangumi).\ filter(Episode.id == episode_id).one() episode_dict = row2dict(episode) episode_dict['bangumi'] = row2dict(bangumi) episode_dict['thumbnail'] = utils.generate_thumbnail_link(episode, bangumi) if episode.status == Episode.STATUS_DOWNLOADED: episode_dict['videos'] = [] torrent_file_cur = session.query(TorrentFile).filter(TorrentFile.episode_id == episode_id) for torrent_file in torrent_file_cur: episode_dict['videos'].append(utils.generate_video_link(str(bangumi.id), torrent_file.file_path)) return json_resp(episode_dict) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) except Exception as error: raise error finally: SessionManager.Session.remove()