def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] page_size = args['page_size'] lookup = args.get('lookup') # Handle max size limit if page_size > 100: page_size = 100 start = page_size * (page - 1) stop = start + page_size kwargs = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'start': start, 'stop': stop, 'sort_by': args.get('sort_by'), 'descending': args.get('descending'), 'session': session } num_of_shows = series.get_series_summary(count=True, **kwargs) raw_series_list = series.get_series_summary(**kwargs) converted_series_list = [get_series_details(show) for show in raw_series_list] pages = int(ceil(num_of_shows / float(page_size))) if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 404 number_of_shows = min(page_size, num_of_shows) response = { 'shows': converted_series_list, 'page_size': number_of_shows, 'total_number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages } if lookup: api_client = ApiClient() for endpoint in lookup: base_url = '/%s/series/' % endpoint for show in response['shows']: pos = response['shows'].index(show) response['shows'][pos].setdefault('lookup', {}) url = base_url + show['show_name'] + '/' result = api_client.get_endpoint(url) response['shows'][pos]['lookup'].update({endpoint: result}) return jsonify(response)
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] page_size = args['page_size'] sort_by = args['sort_by'] order = args['order'] # In case the default 'desc' order was received if order == 'desc': order = True else: order = False kwargs = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'page_size': args.get('page_size'), 'page': args.get('page'), 'session': session } num_of_shows = series.get_series_summary(count=True, **kwargs) raw_series_list = series.get_series_summary(**kwargs) converted_series_list = [get_series_details(show) for show in raw_series_list] sorted_show_list = [] if sort_by == 'show_name': sorted_show_list = sorted(converted_series_list, key=lambda show: show['show_name'], reverse=order) elif sort_by == 'episodes_behind_latest': sorted_show_list = sorted(converted_series_list, key=lambda show: show['latest_downloaded_episode']['number_of_episodes_behind'], reverse=order) elif sort_by == 'last_download_date': sorted_show_list = sorted(converted_series_list, key=lambda show: show['latest_downloaded_episode']['last_downloaded_release'][ 'release_first_seen'] if show['latest_downloaded_episode'][ 'last_downloaded_release'] else datetime.datetime(1970, 1, 1), reverse=order) pages = int(ceil(num_of_shows / float(page_size))) if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 400 number_of_shows = min(page_size, num_of_shows) return jsonify({ 'shows': sorted_show_list, 'number_of_shows': number_of_shows, 'total_number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages })
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] max_results = args['max'] sort_by = args['sort_by'] order = args['order'] # In case the default 'desc' order was received if order == 'desc': order = True else: order = False kwargs = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'session': session } series_list = series.get_series_summary(**kwargs) series_list = series_list.order_by(series.Series.name) num_of_shows = series_list.count() pages = int(ceil(num_of_shows / float(max_results))) shows = sorted_show_list = [] if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 400 start = (page - 1) * max_results finish = start + max_results if finish > num_of_shows: finish = num_of_shows for show_number in range(start, finish): shows.append(get_series_details(series_list[show_number])) if sort_by == 'show_name': sorted_show_list = sorted(shows, key=lambda show: show['show_name'], reverse=order) elif sort_by == 'episodes_behind_latest': sorted_show_list = sorted(shows, key=lambda show: show['latest_downloaded_episode']['number_of_episodes_behind'], reverse=order) elif sort_by == 'last_download_date': sorted_show_list = sorted(shows, key=lambda show: show['latest_downloaded_episode']['last_downloaded_release'][ 'release_first_seen'] if show['latest_downloaded_episode'][ 'last_downloaded_release'] else datetime.datetime(1970, 1, 1), reverse=order) return jsonify({ 'shows': sorted_show_list, 'number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages })
def display_summary(options): """ Display series summary. :param options: argparse options from the CLI """ with Session() as session: kwargs = {'configured': options.configured, 'premieres': options.premieres, 'session': session} if options.new: kwargs['status'] = 'new' kwargs['days'] = options.new elif options.stale: kwargs['status'] = 'stale' kwargs['days'] = options.stale query = get_series_summary(**kwargs) if options.porcelain: formatting = '%-30s %s %-10s %s %-10s %s %-20s' console(formatting % ('Name', '|', 'Latest', '|', 'Age', '|', 'Downloaded')) else: formatting = ' %-30s %-10s %-10s %-20s' console('-' * 79) console(formatting % ('Name', 'Latest', 'Age', 'Downloaded')) console('-' * 79) for series in query.order_by(Series.name).yield_per(10): series_name = series.name if len(series_name) > 30: series_name = series_name[:27] + '...' new_ep = ' ' behind = 0 status = 'N/A' age = 'N/A' episode_id = 'N/A' latest = get_latest_release(series) if latest: if latest.first_seen > datetime.now() - timedelta(days=2): if options.porcelain: pass else: new_ep = '>' behind = new_eps_after(latest) status = get_latest_status(latest) age = latest.age episode_id = latest.identifier if behind: episode_id += ' +%s' % behind if options.porcelain: console(formatting % (series_name, '|', episode_id, '|', age, '|', status)) else: console(new_ep + formatting[1:] % (series_name, episode_id, age, status)) if behind >= 3: console(' ! Latest download is %d episodes behind, this may require ' 'manual intervention' % behind) if options.porcelain: pass else: console('-' * 79) console(' > = new episode ') console(' Use `flexget series show NAME` to get detailed information')
def display_summary(options): """ Display series summary. :param options: argparse options from the CLI """ with Session() as session: kwargs = { 'configured': options.configured, 'premieres': options.premieres, 'session': session } if options.new: kwargs['status'] = 'new' kwargs['days'] = options.new elif options.stale: kwargs['status'] = 'stale' kwargs['days'] = options.stale query = get_series_summary(**kwargs) if options.porcelain: formatting = '%-30s %s %-10s %s %-10s %s %-20s' console(formatting % ('Name', '|', 'Latest', '|', 'Age', '|', 'Downloaded')) else: formatting = ' %-30s %-10s %-10s %-20s' console('-' * 79) console(formatting % ('Name', 'Latest', 'Age', 'Downloaded')) console('-' * 79) for series in query.order_by(Series.name).yield_per(10): series_name = series.name if len(series_name) > 30: series_name = series_name[:27] + '...' new_ep = ' ' behind = 0 status = 'N/A' age = 'N/A' episode_id = 'N/A' latest = get_latest_release(series) if latest: if latest.first_seen > datetime.now() - timedelta(days=2): if options.porcelain: pass else: new_ep = '>' behind = new_eps_after(latest) status = get_latest_status(latest) age = latest.age episode_id = latest.identifier if behind: episode_id += ' +%s' % behind if options.porcelain: console(formatting % (series_name, '|', episode_id, '|', age, '|', status)) else: console(new_ep + formatting[1:] % (series_name, episode_id, age, status)) if behind >= 3: console( ' ! Latest download is %d episodes behind, this may require ' 'manual intervention' % behind) if options.porcelain: pass else: console('-' * 79) console(' > = new episode ') console( ' Use `flexget series show NAME` to get detailed information')
def display_summary(options): """ Display series summary. :param options: argparse options from the CLI """ porcelain = options.table_type == 'porcelain' configured = options.configured or os.environ.get(ENV_LIST_CONFIGURED, 'configured') premieres = True if (os.environ.get(ENV_LIST_PREMIERES) == 'yes' or options.premieres) else False sort_by = options.sort_by or os.environ.get(ENV_LIST_SORTBY_FIELD, 'name') if options.order is not None: descending = True if options.order == 'desc' else False else: descending = True if os.environ.get(ENV_LIST_SORTBY_ORDER) == 'desc' else False with Session() as session: kwargs = {'configured': configured, 'premieres': premieres, 'session': session, 'sort_by': sort_by, 'descending': descending} if sort_by == 'name': kwargs['sort_by'] = 'show_name' else: kwargs['sort_by'] = 'last_download_date' query = get_series_summary(**kwargs) header = ['Name', 'Begin', 'Last Encountered', 'Age', 'Downloaded', 'Identified By'] for index, value in enumerate(header): if value.lower() == options.sort_by: header[index] = colorize(SORT_COLUMN_COLOR, value) table_data = [header] for series in query: name_column = series.name behind = (0,) begin = series.begin.identifier if series.begin else '-' latest_release = '-' age_col = '-' episode_id = '-' latest = get_latest_release(series) identifier_type = series.identified_by if identifier_type == 'auto': identifier_type = colorize('yellow', 'auto') if latest: behind = new_entities_after(latest) latest_release = get_latest_status(latest) # colorize age age_col = latest.age if latest.age_timedelta is not None: if latest.age_timedelta < timedelta(days=1): age_col = colorize(NEW_EP_COLOR, latest.age) elif latest.age_timedelta < timedelta(days=3): age_col = colorize(FRESH_EP_COLOR, latest.age) elif latest.age_timedelta > timedelta(days=400): age_col = colorize(OLD_EP_COLOR, latest.age) episode_id = latest.identifier if not porcelain: if behind[0] > 0: name_column += colorize(BEHIND_EP_COLOR, ' {} {} behind'.format(behind[0], behind[1])) table_data.append([name_column, begin, episode_id, age_col, latest_release, identifier_type]) try: table = TerminalTable(options.table_type, table_data, wrap_columns=[3], drop_columns=[4, 3, 2]) console(table.output) except TerminalTableError as e: console('ERROR: %s' % str(e)) return if not porcelain: if not query.count(): console('Use `flexget series list all` to view all known series.') else: console('Use `flexget series show NAME` to get detailed information.')
def display_summary(options): """ Display series summary. :param options: argparse options from the CLI """ porcelain = options.table_type == 'porcelain' with Session() as session: kwargs = { 'configured': options.configured, 'premieres': options.premieres, 'session': session, 'sort_by': options.sort_by, 'descending': options.order } if options.new: kwargs['status'] = 'new' kwargs['days'] = options.new elif options.stale: kwargs['status'] = 'stale' kwargs['days'] = options.stale if options.sort_by == 'name': kwargs['sort_by'] = 'show_name' else: kwargs['sort_by'] = 'last_download_date' query = get_series_summary(**kwargs) header = ['Name', 'Latest', 'Age', 'Downloaded', 'Identified By'] for index, value in enumerate(header): if value.lower() == options.sort_by: header[index] = colorize(SORT_COLUMN_COLOR, value) table_data = [header] for series in query: name_column = series.name behind = (0, ) latest_release = '-' age_col = '-' episode_id = '-' latest = get_latest_release(series) identifier_type = series.identified_by if identifier_type == 'auto': identifier_type = colorize('yellow', 'auto') if latest: behind = new_entities_after(latest) latest_release = get_latest_status(latest) # colorize age age_col = latest.age if latest.age_timedelta is not None: if latest.age_timedelta < timedelta(days=1): age_col = colorize(NEW_EP_COLOR, latest.age) elif latest.age_timedelta < timedelta(days=3): age_col = colorize(FRESH_EP_COLOR, latest.age) elif latest.age_timedelta > timedelta(days=400): age_col = colorize(OLD_EP_COLOR, latest.age) episode_id = latest.identifier if not porcelain: if behind[0] > 0: name_column += colorize( BEHIND_EP_COLOR, ' {} {} behind'.format(behind[0], behind[1])) table_data.append([ name_column, episode_id, age_col, latest_release, identifier_type ]) try: table = TerminalTable(options.table_type, table_data, wrap_columns=[3], drop_columns=[4, 3, 2]) console(table.output) except TerminalTableError as e: console('ERROR: %s' % str(e)) return if not porcelain: if not query.count(): console('Use `flexget series list all` to view all known series.') else: console( 'Use `flexget series show NAME` to get detailed information.')
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] max_results = args['number_of_shows'] sort_by = args['sort_by'] order = args['order'] # In case the default 'desc' order was received if order == 'desc': order = True else: order = False kwargs = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'session': session } raw_series_list = series.get_series_summary(**kwargs) converted_series_list = [ get_series_details(show) for show in raw_series_list ] sorted_show_list = [] if sort_by == 'show_name': sorted_show_list = sorted(converted_series_list, key=lambda show: show['show_name'], reverse=order) elif sort_by == 'episodes_behind_latest': sorted_show_list = sorted( converted_series_list, key=lambda show: show['latest_downloaded_episode'][ 'number_of_episodes_behind'], reverse=order) elif sort_by == 'last_download_date': sorted_show_list = sorted( converted_series_list, key=lambda show: show['latest_downloaded_episode'][ 'last_downloaded_release']['release_first_seen'] if show['latest_downloaded_episode']['last_downloaded_release'] else datetime.datetime(1970, 1, 1), reverse=order) num_of_shows = len(sorted_show_list) pages = int(ceil(num_of_shows / float(max_results))) shows = [] if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 400 start = (page - 1) * max_results finish = start + max_results if finish > num_of_shows: finish = num_of_shows for show_number in range(start, finish): shows.append(sorted_show_list[show_number]) number_of_shows = min(max_results, num_of_shows) return jsonify({ 'shows': shows, 'number_of_shows': number_of_shows, 'total_number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages })
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] page_size = args['page_size'] lookup = args.get('lookup') # Handle max size limit if page_size > 100: page_size = 100 sort_by = args['sort_by'] 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 = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'start': start, 'stop': stop, 'session': session } num_of_shows = series.get_series_summary(count=True, **kwargs) raw_series_list = series.get_series_summary(**kwargs) converted_series_list = [get_series_details(show) for show in raw_series_list] sorted_show_list = [] if sort_by == 'show_name': sorted_show_list = sorted(converted_series_list, key=lambda show: show['show_name'], reverse=order) elif sort_by == 'episodes_behind_latest': sorted_show_list = sorted(converted_series_list, key=lambda show: show['latest_downloaded_episode']['number_of_episodes_behind'], reverse=order) elif sort_by == 'last_download_date': sorted_show_list = sorted(converted_series_list, key=lambda show: show['latest_downloaded_episode']['last_downloaded_release'][ 'release_first_seen'] if show['latest_downloaded_episode'][ 'last_downloaded_release'] else datetime.datetime(1970, 1, 1), reverse=order) pages = int(ceil(num_of_shows / float(page_size))) if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 404 number_of_shows = min(page_size, num_of_shows) response = { 'shows': sorted_show_list, 'page_size': number_of_shows, 'total_number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages } if lookup: api_client = ApiClient() for endpoint in lookup: base_url = '/%s/series/' % endpoint for show in response['shows']: pos = response['shows'].index(show) response['shows'][pos].setdefault('lookup', {}) url = base_url + show['show_name'] + '/' result = api_client.get_endpoint(url) response['shows'][pos]['lookup'].update({endpoint: result}) return jsonify(response)
def display_summary(options): """ Display series summary. :param options: argparse options from the CLI """ porcelain = options.table_type == 'porcelain' with Session() as session: kwargs = {'configured': options.configured, 'premieres': options.premieres, 'session': session, 'sort_by': options.sort_by, 'descending': options.order} if options.new: kwargs['status'] = 'new' kwargs['days'] = options.new elif options.stale: kwargs['status'] = 'stale' kwargs['days'] = options.stale if options.sort_by == 'name': kwargs['sort_by'] = 'show_name' else: kwargs['sort_by'] = 'last_download_date' query = get_series_summary(**kwargs) header = ['Name', 'Latest', 'Age', 'Downloaded', 'Identified By'] for index, value in enumerate(header): if value.lower() == options.sort_by: header[index] = colorize(SORT_COLUMN_COLOR, value) footer = 'Use `flexget series show NAME` to get detailed information' table_data = [header] for series in query: name_column = series.name new_ep = False behind = 0 latest_release = '-' age_col = '-' episode_id = '-' latest = get_latest_release(series) identifier_type = series.identified_by if identifier_type == 'auto': identifier_type = colorize('yellow', 'auto') if latest: behind = new_eps_after(latest) latest_release = get_latest_status(latest) # colorize age age_col = latest.age if latest.age_timedelta is not None: if latest.age_timedelta < timedelta(days=1): age_col = colorize(NEW_EP_COLOR, latest.age) elif latest.age_timedelta < timedelta(days=3): age_col = colorize(FRESH_EP_COLOR, latest.age) elif latest.age_timedelta > timedelta(days=400): age_col = colorize(OLD_EP_COLOR, latest.age) episode_id = latest.identifier if not porcelain: if behind > 0: name_column += colorize(BEHIND_EP_COLOR, ' {} behind'.format(behind)) table_data.append([name_column, episode_id, age_col, latest_release, identifier_type]) table = TerminalTable(options.table_type, table_data, wrap_columns=[3], drop_columns=[4, 3, 2]) try: console(table.output) except TerminalTableError as e: console('ERROR: %s' % str(e)) return if not porcelain: console(footer)
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() # Filter params configured = args['in_config'] premieres = args['premieres'] status = args['status'] days = args['days'] # Pagination and sorting params page = args['page'] per_page = args['per_page'] sort_by = args['sort_by'] sort_order = args['order'] # Handle max size limit if per_page > 100: per_page = 100 descending = bool(sort_order == 'desc') # Data params lookup = args.get('lookup') begin = args.get('begin') latest = args.get('latest') start = per_page * (page - 1) stop = start + per_page kwargs = { 'configured': configured, 'premieres': premieres, 'status': status, 'days': days, 'start': start, 'stop': stop, 'sort_by': sort_by, 'descending': descending, 'session': session } total_items = series.get_series_summary(count=True, **kwargs) if not total_items: return jsonify([]) series_list = [] for s in series.get_series_summary(**kwargs): series_object = series_details(s, begin, latest) series_list.append(series_object) # Total number of pages 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(series_list)) # Do relevant lookups if lookup: api_client = APIClient() for endpoint in lookup: base_url = '/%s/series/' % endpoint for show in series_list: pos = series_list.index(show) series_list[pos].setdefault('lookup', {}) url = base_url + show['name'] + '/' result = api_client.get_endpoint(url) series_list[pos]['lookup'].update({endpoint: result}) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Created response rsp = jsonify(series_list) # Add link header to response rsp.headers.extend(pagination) return rsp
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() # Filter params configured = args['in_config'] premieres = args['premieres'] status = args['status'] days = args['days'] # Pagination and sorting params page = args['page'] per_page = args['per_page'] sort_by = args['sort_by'] sort_order = args['order'] # Handle max size limit if per_page > 100: per_page = 100 descending = sort_order == 'desc' # Data params lookup = args.get('lookup') begin = args.get('begin') latest = args.get('latest') start = per_page * (page - 1) stop = start + per_page kwargs = { 'configured': configured, 'premieres': premieres, 'status': status, 'days': days, 'start': start, 'stop': stop, 'sort_by': sort_by, 'descending': descending, 'session': session } total_items = series.get_series_summary(count=True, **kwargs) if not total_items: return jsonify([]) series_list = [] for s in series.get_series_summary(**kwargs): series_object = series_details(s, begin, latest) series_list.append(series_object) # Total number of pages 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(series_list)) # Do relevant lookups if lookup: api_client = APIClient() for endpoint in lookup: base_url = '/%s/series/' % endpoint for show in series_list: pos = series_list.index(show) series_list[pos].setdefault('lookup', {}) url = base_url + show['name'] + '/' result = api_client.get_endpoint(url) series_list[pos]['lookup'].update({endpoint: result}) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Created response rsp = jsonify(series_list) # Add link header to response rsp.headers.extend(pagination) return rsp
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() # Filter params configured = args["in_config"] premieres = args["premieres"] status = args["status"] days = args["days"] # Pagination and sorting params page = args["page"] per_page = args["per_page"] sort_by = args["sort_by"] sort_order = args["order"] # Handle max size limit if per_page > 100: per_page = 100 descending = bool(sort_order == "desc") # Data params lookup = args.get("lookup") begin = args.get("begin") latest = args.get("latest") start = per_page * (page - 1) stop = start + per_page kwargs = { "configured": configured, "premieres": premieres, "status": status, "days": days, "start": start, "stop": stop, "sort_by": sort_by, "descending": descending, "session": session, } total_items = series.get_series_summary(count=True, **kwargs) if not total_items: return jsonify([]) series_list = [] for s in series.get_series_summary(**kwargs): series_object = series_details(s, begin, latest) series_list.append(series_object) # Total number of pages 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(series_list)) # Do relevant lookups if lookup: api_client = APIClient() for endpoint in lookup: base_url = "/%s/series/" % endpoint for show in series_list: pos = series_list.index(show) series_list[pos].setdefault("lookup", {}) url = base_url + show["name"] + "/" result = api_client.get_endpoint(url) series_list[pos]["lookup"].update({endpoint: result}) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Created response rsp = jsonify(series_list) # Add link header to response rsp.headers.extend(pagination) return rsp
def get(self, session=None): """ List existing shows """ args = series_list_parser.parse_args() page = args['page'] page_size = args['page_size'] lookup = args.get('lookup') # Handle max size limit if page_size > 100: page_size = 100 sort_by = args['sort_by'] 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 = { 'configured': args.get('in_config'), 'premieres': args.get('premieres'), 'status': args.get('status'), 'days': args.get('days'), 'start': start, 'stop': stop, 'session': session } num_of_shows = series.get_series_summary(count=True, **kwargs) raw_series_list = series.get_series_summary(**kwargs) converted_series_list = [ get_series_details(show) for show in raw_series_list ] sorted_show_list = [] if sort_by == 'show_name': sorted_show_list = sorted(converted_series_list, key=lambda show: show['show_name'], reverse=order) elif sort_by == 'episodes_behind_latest': sorted_show_list = sorted( converted_series_list, key=lambda show: show['latest_downloaded_episode'][ 'number_of_episodes_behind'], reverse=order) elif sort_by == 'last_download_date': sorted_show_list = sorted( converted_series_list, key=lambda show: show['latest_downloaded_episode'][ 'last_downloaded_release']['release_first_seen'] if show['latest_downloaded_episode']['last_downloaded_release'] else datetime.datetime(1970, 1, 1), reverse=order) pages = int(ceil(num_of_shows / float(page_size))) if page > pages and pages != 0: return {'error': 'page %s does not exist' % page}, 404 number_of_shows = min(page_size, num_of_shows) response = { 'shows': sorted_show_list, 'page_size': number_of_shows, 'total_number_of_shows': num_of_shows, 'page': page, 'total_number_of_pages': pages } if lookup: api_client = ApiClient() for endpoint in lookup: base_url = '/%s/series/' % endpoint for show in response['shows']: pos = response['shows'].index(show) response['shows'][pos].setdefault('lookup', {}) url = base_url + show['show_name'] + '/' result = api_client.get_endpoint(url) response['shows'][pos]['lookup'].update({endpoint: result}) return jsonify(response)