def get(self, show_id, ep_id, rel_id, session): """ Get episode release by show ID, episode ID and release ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) try: release = series.release_by_id(rel_id, session) except NoResultFound: raise NotFoundError('release with ID %s not found' % rel_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) if not series.release_in_episode(ep_id, rel_id): raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id)) rsp = jsonify(release.to_dict()) rsp.headers.extend({ 'Series-ID': show_id, 'Episode-ID': ep_id }) return rsp
def delete(self, show_id, ep_id, session): """ Deletes all episodes releases by show ID and episode ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: episode = series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) args = release_delete_parser.parse_args() downloaded = args.get('downloaded') is True if args.get('downloaded') is not None else None release_items = [] for release in episode.releases: if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded: release_items.append(release) for release in release_items: if args.get('forget'): fire_event('forget', release.title) series.delete_release_by_id(release.id) return success_response('successfully deleted all releases for episode %s from show %s' % (ep_id, show_id))
def put(self, show_id, ep_id, rel_id, session): """ Resets a downloaded release status """ try: series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 if not release.downloaded: return {'status': 'error', 'message': 'Release with id %s is not set as downloaded' % rel_id}, 500 release.downloaded = False return {}
def delete(self, show_id, ep_id, rel_id, session): """ Delete episode release by show ID, episode ID and release ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) try: release = series.release_by_id(rel_id, session) except NoResultFound: raise NotFoundError('release with ID %s not found' % rel_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) if not series.release_in_episode(ep_id, rel_id): raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id)) args = delete_parser.parse_args() if args.get('forget'): fire_event('forget', release.title) series.delete_release_by_id(rel_id) return success_response( 'successfully deleted release %d from episode %d' % (rel_id, ep_id))
def get(self, show_id, ep_id, session): """ Get all episodes releases by show ID and episode ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = release_list_parser.parse_args() downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None release_items = [] for release in episode.releases: if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded: release_items.append(get_release_details(release)) return jsonify({ 'releases': release_items, 'number_of_releases': len(release_items), 'episode_id': ep_id, 'show_id': show_id })
def delete(self, show_id, ep_id, rel_id, session): ''' Delete episode release by show ID, episode ID and release ID ''' try: series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 args = delete_parser.parse_args() if args.get('delete_seen'): fire_event('forget', release.title) series.delete_release_by_id(rel_id) return {}
def delete(self, show_id, ep_id, session): """ Deletes all episodes releases by show ID and episode ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = release_delete_parser.parse_args() downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None release_items = [] for release in episode.releases: if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded: release_items.append(release) if args.get('delete_seen'): fire_event('forget', release.title) for release in release_items: series.delete_release_by_id(release.id) return {}
def put(self, show_id, ep_id, rel_id, session): """ Resets a downloaded release status """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) try: release = series.release_by_id(rel_id, session) except NoResultFound: raise NotFoundError('release with ID %s not found' % rel_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) if not series.release_in_episode(ep_id, rel_id): raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id)) if not release.downloaded: raise BadRequest('release with id %s is not set as downloaded' % rel_id) release.downloaded = False rsp = jsonify(release.to_dict()) rsp.headers.extend({ 'Series-ID': show_id, 'Episode-ID': ep_id }) return rsp
def get(self, show_id, ep_id, session): """ Get episode by show ID and episode ID""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return { 'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return { 'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id) }, 400 return jsonify({ 'show': show.name, 'show_id': show_id, 'episode': get_episode_details(episode) })
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = delete_parser.parse_args() if args.get('delete_seen'): for release in episode.releases: fire_event('forget', release.title) series.forget_episodes_by_id(show_id, ep_id) return {}
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return { 'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return { 'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id) }, 400 series.forget_episodes_by_id(show_id, ep_id) return {}
def get(self, show_id, ep_id, rel_id, session): ''' Get episode release by show ID, episode ID and release ID ''' try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 return jsonify({ 'show': show.name, 'show_id': show_id, 'episode_id': ep_id, 'release': get_release_details(release) })
def put(self, show_id, ep_id, rel_id, session): """ Resets a downloaded release status """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 if not release.downloaded: return {'status': 'error', 'message': 'Release with id %s is not set as downloaded' % rel_id}, 500 release.downloaded = False return {}
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return { 'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return { 'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id) }, 400 args = delete_parser.parse_args() if args.get('delete_seen'): for release in episode.releases: fire_event('forget', release.title) series.forget_episodes_by_id(show_id, ep_id) return {}
def put(self, show_id, ep_id, session): """ Marks all downloaded releases as not downloaded """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return { 'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return { 'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id) }, 400 for release in episode.releases: if release.downloaded: release.downloaded = False return {}
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = delete_parser.parse_args() try: series.remove_series_episode(show.name, episode.identifier, args.get('forget')) except ValueError as e: return {'status': 'error', 'message': e.args[0] }, 404 return {}
def delete(self, show_id, ep_id, rel_id, session): ''' Delete episode release by show ID, episode ID and release ID ''' try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 series.delete_release_by_id(rel_id) return {}
def put(self, show_id, session): """ Set the initial episode of an existing show """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 data = request.json ep_id = data.get('episode_identifier') alt_names = data.get('alternate_names') if ep_id: try: series.set_series_begin(show, ep_id) except ValueError as e: return {'status': 'error', 'message': e.args[0] }, 501 if alt_names: try: series.set_alt_names(alt_names, show, session) except PluginError as e: return {'status': 'error', 'message': e.value }, 502 return jsonify(get_series_details(show))
def get(self, show_id, ep_id, session): """ Get all episodes releases by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = release_list_parser.parse_args() downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None release_items = [] for release in episode.releases: if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded: release_items.append(get_release_details(release)) return jsonify({ 'releases': release_items, 'number_of_releases': len(release_items), 'episode_id': ep_id, 'show_id': show_id })
def delete(self, show_id, ep_id, session): """ Deletes all episodes releases by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = release_delete_parser.parse_args() downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None release_items = [] for release in episode.releases: if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded: release_items.append(release) if args.get('delete_seen'): fire_event('forget', release.title) for release in release_items: series.delete_release_by_id(release.id) return {}
def delete(self, show_id, ep_id, rel_id, session): ''' Delete episode release by show ID, episode ID and release ID ''' try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 try: release = series.release_by_id(rel_id, session) except NoResultFound: return {'status': 'error', 'message': 'Release with ID %s not found' % rel_id }, 424 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 if not series.release_in_episode(ep_id, rel_id): return {'status': 'error', 'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410 args = delete_parser.parse_args() if args.get('delete_seen'): fire_event('forget', release.title) series.delete_release_by_id(rel_id) return {}
def delete(self, show_id, ep_id, session): """ Deletes all episodes releases by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 args = release_list_parser.parse_args() downloaded = args['downloaded'] release_items = [] for release in episode.releases: if (downloaded == 'downloaded' and release.downloaded) or \ (downloaded == 'not_downloaded' and not release.downloaded) or \ downloaded == 'all': release_items.append(release) number_of_releases = len(release_items) for release in release_items: series.delete_release_by_id(release.id) return {}
def get(self, show_id, ep_id, session): """ Get episode by show ID and episode ID""" try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: episode = series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) rsp = jsonify(episode.to_dict()) # Add Series-ID header rsp.headers.extend({'Series-ID': show_id}) return rsp
def get(self, show_id, session): """ Get episodes by show ID """ args = episode_parser.parse_args() # Pagination and sorting params page = args['page'] per_page = args['per_page'] sort_order = args['order'] # Handle max size limit if per_page > 100: per_page = 100 descending = sort_order == 'desc' start = per_page * (page - 1) stop = start + per_page kwargs = { 'start': start, 'stop': stop, 'descending': descending, 'session': session } try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) total_items = series.show_episodes(show, count=True, session=session) if not total_items: return jsonify([]) episodes = [episode.to_dict() for episode in series.show_episodes(show, **kwargs)] total_pages = int(ceil(total_items / float(per_page))) if total_pages < page and total_pages != 0: raise NotFoundError('page %s does not exist' % page) # Actual results in page actual_size = min(per_page, len(episodes)) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Created response rsp = jsonify(episodes) # Add link header to response rsp.headers.extend(pagination) # Add series ID header rsp.headers.extend({'Series-ID': show_id}) return rsp
def get(self, show_id, session): """ Get episodes by show ID """ args = episode_parser.parse_args() page = args['page'] page_size = args['page_size'] # Handle max size limit if page_size > 100: page_size = 100 order = args['order'] # In case the default 'desc' order was received if order == 'desc': order = True else: order = False start = page_size * (page - 1) stop = start + page_size kwargs = { 'start': start, 'stop': stop, 'descending': order, 'session': session } try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 count = series.show_episodes(show, count=True, session=session) episodes = [ get_episode_details(episode) for episode in series.show_episodes(show, **kwargs) ] pages = int(ceil(count / float(page_size))) if page > pages and pages != 0: return { 'status': 'error', 'message': 'page does not exist' % show_id }, 500 return jsonify({ 'show': show.name, 'show_id': show_id, 'number_of_episodes': len(episodes), 'episodes': episodes, 'total_number_of_episodes': count, 'page': page, 'total_number_of_pages': pages })
def put(self, show_id, ep_id, session): """ Marks all downloaded releases as not downloaded """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: episode = series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) for release in episode.releases: if release.downloaded: release.downloaded = False return success_response( 'successfully reset download status for all releases for episode %s from show %s' % (ep_id, show_id))
def delete(self, show_id, session): """ Deletes all episodes of a show""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) args = delete_parser.parse_args() forget = args.get('forget') for episode in show.episodes: series.remove_series_entity(show.name, episode.identifier, forget) return success_response('successfully removed all series %s episodes from DB' % show_id)
def get(self, show_id, session): """ Get show details by ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('Show with ID %s not found' % show_id) args = series_list_parser.parse_args() begin = args.get('begin') latest = args.get('latest') return jsonify(series_details(show, begin, latest))
def delete(self, show_id, session): """ Remove series from DB """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('Show with ID %s not found' % show_id) name = show.name args = delete_parser.parse_args() series.remove_series(name, forget=args.get('forget')) return success_response('successfully removed series %s from DB' % show_id)
def get(self, show_id, session): """ Get show details by ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 show = get_series_details(show) return jsonify(show)
def put(self, show_id, ep_id, session): """ Marks all downloaded releases as not downloaded """ try: series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 for release in episode.releases: if release.downloaded: release.downloaded = False return {}
def get(self, show_id, session): """ Get episodes by show ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 episodes = [get_episode_details(episode) for episode in show.episodes] return jsonify({'show': show.name, 'show_id': show_id, 'number_of_episodes': len(episodes), 'episodes': episodes})
def get(self, show_id, session): """ Get episodes by show ID """ args = episode_parser.parse_args() page = args['page'] page_size = args['page_size'] # Handle max size limit if page_size > 100: page_size = 100 order = args['order'] # In case the default 'desc' order was received if order == 'desc': order = True else: order = False start = page_size * (page - 1) stop = start + page_size kwargs = { 'start': start, 'stop': stop, 'descending': order, 'session': session } try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 count = series.show_episodes(show, count=True, session=session) episodes = [get_episode_details(episode) for episode in series.show_episodes(show, **kwargs)] pages = int(ceil(count / float(page_size))) if page > pages and pages != 0: return {'status': 'error', 'message': 'page does not exist' % show_id }, 500 return jsonify({'show': show.name, 'show_id': show_id, 'number_of_episodes': len(episodes), 'episodes': episodes, 'total_number_of_episodes': count, 'page': page, 'total_number_of_pages': pages})
def delete(self, show_id, ep_id, rel_id, session): """ Delete episode release by show ID, episode ID and release ID """ try: series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) try: release = series.release_by_id(rel_id, session) except NoResultFound: raise NotFoundError('release with ID %s not found' % rel_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) if not series.release_in_episode(ep_id, rel_id): raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id)) args = delete_parser.parse_args() if args.get('forget'): fire_event('forget', release.title) series.delete_release_by_id(rel_id) return success_response('successfully deleted release %d from episode %d' % (rel_id, ep_id))
def delete(self, show_id, session): """ Forgets all episodes of a show""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 for episode in show.episodes: try: series.forget_episodes_by_id(show.id, episode.id) except ValueError as e: return {'status': 'error', 'message': e.args[0]}, 500 return {}
def delete(self, show_id, session): """ Deletes all episodes of a show""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 name = show.name args = delete_parser.parse_args() try: series.remove_series(name, forget=args.get('forget')) except ValueError as e: return {'status': 'error', 'message': e.args[0]}, 404 return {}
def delete(self, show_id, session): """ Forgets all episodes of a show""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 for episode in show.episodes: try: series.forget_episodes_by_id(show.id, episode.id) except ValueError as e: return {'status': 'error', 'message': e.args[0] }, 500 return {}
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('show with ID %s not found' % show_id) try: episode = series.episode_by_id(ep_id, session) except NoResultFound: raise NotFoundError('episode with ID %s not found' % ep_id) if not series.episode_in_show(show_id, ep_id): raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id)) args = delete_parser.parse_args() series.remove_series_entity(show.name, episode.identifier, args.get('forget')) return success_response('successfully removed episode %s from show %s' % (ep_id, show_id))
def delete(self, show_id, session): """ Deletes all episodes of a show""" try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 name = show.name args = delete_parser.parse_args() try: series.remove_series(name, forget=args.get('forget')) except ValueError as e: return {'status': 'error', 'message': e.args[0] }, 404 return {}
def get(self, show_id, session): """ Get episodes by show ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 episodes = [get_episode_details(episode) for episode in show.episodes] return jsonify({ 'show': show.name, 'show_id': show_id, 'number_of_episodes': len(episodes), 'episodes': episodes })
def delete(self, show_id, session): """ Remove series from DB """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 name = show.name try: series.forget_series(name) except ValueError as e: return {'status': 'error', 'message': e.args[0]}, 400 return {}
def delete(self, show_id, session): """ Remove series from DB """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 name = show.name try: series.forget_series(name) except ValueError as e: return {'status': 'error', 'message': e.args[0] }, 400 return {}
def put(self, show_id, session): """ Set the initial episode of an existing show """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: raise NotFoundError('Show with ID %s not found' % show_id) data = request.json ep_id = data.get('begin_episode') alt_names = data.get('alternate_names') if ep_id: series.set_series_begin(show, ep_id) if alt_names: try: series.set_alt_names(alt_names, show, session) except PluginError as e: # Alternate name already exist for a different show raise Conflict(e.value) return jsonify(series_details(show, begin=ep_id is not None))
def delete(self, show_id, ep_id, session): """ Forgets episode by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return {'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return {'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return {'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400 series.forget_episodes_by_id(show_id, ep_id) return {}
def delete(self, show_id, ep_id, session): """ Deletes all episodes releases by show ID and episode ID """ try: show = series.show_by_id(show_id, session=session) except NoResultFound: return { 'status': 'error', 'message': 'Show with ID %s not found' % show_id }, 404 try: episode = series.episode_by_id(ep_id, session) except NoResultFound: return { 'status': 'error', 'message': 'Episode with ID %s not found' % ep_id }, 414 if not series.episode_in_show(show_id, ep_id): return { 'status': 'error', 'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id) }, 400 args = release_list_parser.parse_args() downloaded = args['downloaded'] release_items = [] for release in episode.releases: if (downloaded == 'downloaded' and release.downloaded) or \ (downloaded == 'not_downloaded' and not release.downloaded) or \ downloaded == 'all': release_items.append(release) number_of_releases = len(release_items) for release in release_items: series.delete_release_by_id(release.id) return {}