def test_get_quality_string(self): """ Test get quality string """ tests = { ANY: "Any", HD: "HD", HD720p: "HD720p", HD1080p: "HD1080p", Quality.FULLHDBLURAY: "1080p BluRay", Quality.FULLHDTV: "1080p HDTV", Quality.FULLHDWEBDL: "1080p WEB-DL", Quality.HDBLURAY: "720p BluRay", Quality.HDTV: "720p HDTV", Quality.HDWEBDL: "720p WEB-DL", Quality.NONE: "N/A", Quality.RAWHDTV: "RawHD", Quality.SDDVD: "SD DVD", Quality.SDTV: "SDTV", Quality.UNKNOWN: "Unknown", SD: "SD", 1000000: "Custom", # An invalid quality number to test the default case } for (quality, result) in tests.items(): assert get_quality_string(quality) == result
def test_get_quality_string(self): """ Test get quality string """ tests = { ANY: 'Any', HD: 'HD', HD720p: 'HD720p', HD1080p: 'HD1080p', Quality.FULLHDBLURAY: '1080p BluRay', Quality.FULLHDTV: '1080p HDTV', Quality.FULLHDWEBDL: '1080p WEB-DL', Quality.HDBLURAY: '720p BluRay', Quality.HDTV: '720p HDTV', Quality.HDWEBDL: '720p WEB-DL', Quality.NONE: 'N/A', Quality.RAWHDTV: 'RawHD', Quality.SDDVD: 'SD DVD', Quality.SDTV: 'SDTV', Quality.UNKNOWN: 'Unknown', SD: 'SD', 1000000: 'Custom', # An invalid quality number to test the default case } for (quality, result) in six.iteritems(tests): self.assertEqual(get_quality_string(quality), result)
def test_get_quality_string(self): """ Test get quality string """ tests = { ANY: 'Any', HD: 'HD', HD720p: 'HD720p', HD1080p: 'HD1080p', Quality.FULLHDBLURAY: '1080p BluRay', Quality.FULLHDTV: '1080p HDTV', Quality.FULLHDWEBDL: '1080p WEB-DL', Quality.HDBLURAY: '720p BluRay', Quality.HDTV: '720p HDTV', Quality.HDWEBDL: '720p WEB-DL', Quality.NONE: 'N/A', Quality.RAWHDTV: 'RawHD', Quality.SDDVD: 'SD DVD', Quality.SDTV: 'SDTV', Quality.UNKNOWN: 'Unknown', SD: 'SD', 1000000: 'Custom', # An invalid quality number to test the default case } for (quality, result) in tests.items(): self.assertEqual(get_quality_string(quality), result)
def get_coming_episodes(categories, sort, group, paused=sickbeard.COMING_EPS_DISPLAY_PAUSED): """ :param categories: The categories of coming episodes. See ``ComingEpisodes.categories`` :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts`` :param group: ``True`` to group the coming episodes by category, ``False`` otherwise :param paused: ``True`` to include paused shows, ``False`` otherwise :return: The list of coming episodes """ categories = ComingEpisodes._get_categories(categories) sort = ComingEpisodes._get_sort(sort) today = date.today().toordinal() recently = ( date.today() - timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() next_week = (date.today() + timedelta(days=7)).toordinal() db = DBConnection(row_type='dict') fields_to_select = ', '.join([ 'airdate', 'airs', 'e.description as description', 'episode', 'imdb_id', 'e.indexer', 'indexer_id', 'e.location', 'name', 'network', 'paused', 'quality', 'runtime', 'season', 'show_name', 'showid', 'e.status as epstatus', 's.status' ]) status_list = [WANTED, UNAIRED] + SNATCHED sql_l = [] for show_obj in sickbeard.showList: next_air_date = show_obj.nextEpisode() sql_l.append([ 'SELECT DISTINCT {0} '.format(fields_to_select) + 'FROM tv_episodes e, tv_shows s ' 'WHERE showid = ? ' 'AND airdate <= ? ' 'AND airdate >= ? ' 'AND s.indexer_id = e.showid ' 'AND e.status IN (' + ','.join(['?'] * len(status_list)) + ')', [show_obj.indexerid, next_air_date or today, recently] + status_list ]) results = [] for sql_i in sql_l: if results: results += db.select(*sql_i) else: results = db.select(*sql_i) for index, item in enumerate(results): results[index][b'localtime'] = sbdatetime.convert_to_setting( parse_date_time(item[b'airdate'], item[b'airs'], item[b'network'])) results[index][b'snatchedsort'] = int( not results[index][b'epstatus'] in SNATCHED) results.sort(key=ComingEpisodes.sorts[sort]) if not group: return results grouped_results = ComingEpisodes._get_categories_map(categories) for result in results: if result[b'paused'] and not paused: continue result[b'airs'] = str(result[b'airs']).replace( 'am', ' AM').replace('pm', ' PM').replace(' ', ' ') result[b'airdate'] = result[b'localtime'].toordinal() if result[b'epstatus'] in SNATCHED: if result[b'location']: continue else: category = 'snatched' elif result[b'airdate'] < today: category = 'missed' elif result[b'airdate'] >= next_week: category = 'later' elif result[b'airdate'] == today: category = 'today' else: category = 'soon' if len(categories) > 0 and category not in categories: continue if not result[b'network']: result[b'network'] = '' result[b'quality'] = get_quality_string(result[b'quality']) result[b'airs'] = sbdatetime.sbftime( result[b'localtime'], t_preset=timeFormat).lstrip('0').replace(' 0', ' ') result[b'weekday'] = 1 + result[b'localtime'].weekday() result[b'tvdbid'] = result[b'indexer_id'] result[b'airdate'] = sbdatetime.sbfdate(result[b'localtime'], d_preset=dateFormat) result[b'localtime'] = result[b'localtime'].toordinal() grouped_results[category].append(result) return grouped_results
def get_coming_episodes(categories, sort, group, paused=settings.COMING_EPS_DISPLAY_PAUSED): """ :param categories: The categories of coming episodes. See ``ComingEpisodes.categories`` :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts`` :param group: ``True`` to group the coming episodes by category, ``False`` otherwise :param paused: ``True`` to include paused shows, ``False`` otherwise :return: The list of coming episodes """ categories = ComingEpisodes._get_categories(categories) sort = ComingEpisodes._get_sort(sort) today = date.today().toordinal() recently = ( date.today() - timedelta(days=settings.COMING_EPS_MISSED_RANGE)).toordinal() next_week = (date.today() + timedelta(days=7)).toordinal() db = DBConnection(row_type="dict") fields_to_select = ", ".join([ "airdate", "airs", "e.description as description", "episode", "imdb_id", "e.indexer", "indexer_id", "e.location", "name", "network", "paused", "quality", "runtime", "season", "show_name", "showid", "e.status as epstatus", "s.status", ]) status_list = [WANTED, UNAIRED] + SNATCHED sql_l = [] for show_obj in settings.showList: next_air_date = show_obj.nextEpisode() sql_l.append([ "SELECT DISTINCT {0} ".format(fields_to_select) + "FROM tv_episodes e, tv_shows s " "WHERE showid = ? " "AND airdate <= ? " "AND airdate >= ? " "AND s.indexer_id = e.showid " "AND e.status IN (" + ",".join(["?"] * len(status_list)) + ")", [show_obj.indexerid, next_air_date or today, recently] + status_list, ]) results = [] for sql_i in sql_l: if results: results += db.select(*sql_i) else: results = db.select(*sql_i) for index, item in enumerate(results): results[index]["localtime"] = sbdatetime.convert_to_setting( parse_date_time(item["airdate"], item["airs"], item["network"])) results[index]["snatchedsort"] = int( not results[index]["epstatus"] in SNATCHED) results.sort(key=ComingEpisodes.sorts[sort]) if not group: return results grouped_results = ComingEpisodes._get_categories_map(categories) for result in results: if result["paused"] and not paused: continue result["airs"] = str(result["airs"]).replace("am", " AM").replace( "pm", " PM").replace(" ", " ") result["airdate"] = result["localtime"].toordinal() if result["epstatus"] in SNATCHED: if result["location"]: continue else: category = "snatched" elif result["airdate"] < today: category = "missed" elif result["airdate"] >= next_week: category = "later" elif result["airdate"] == today: category = "today" else: category = "soon" if categories and category not in categories: continue if not result["network"]: result["network"] = "" result["quality"] = get_quality_string(result["quality"]) result["airs"] = sbdatetime.sbftime( result["localtime"], t_preset=timeFormat).lstrip("0").replace(" 0", " ") result["weekday"] = 1 + result["localtime"].weekday() result["tvdbid"] = result["indexer_id"] result["airdate"] = sbdatetime.sbfdate(result["localtime"], d_preset=dateFormat) result["localtime"] = result["localtime"].toordinal() grouped_results[category].append(result) return grouped_results
def get_coming_episodes(categories, sort, group, paused=sickbeard.COMING_EPS_DISPLAY_PAUSED): """ :param categories: The categories of coming episodes. See ``ComingEpisodes.categories`` :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts`` :param group: ``True`` to group the coming episodes by category, ``False`` otherwise :param paused: ``True`` to include paused shows, ``False`` otherwise :return: The list of coming episodes """ categories = ComingEpisodes._get_categories(categories) sort = ComingEpisodes._get_sort(sort) today = date.today().toordinal() recently = (date.today() - timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() next_week = (date.today() + timedelta(days=7)).toordinal() db = DBConnection(row_type='dict') fields_to_select = ', '.join( ['airdate', 'airs', 'e.description as description', 'episode', 'imdb_id', 'e.indexer', 'indexer_id', 'e.location', 'name', 'network', 'paused', 'quality', 'runtime', 'season', 'show_name', 'showid', 'e.status as epstatus', 's.status'] ) status_list = [WANTED, UNAIRED] + SNATCHED sql_l = [] for show_obj in sickbeard.showList: next_air_date = show_obj.nextEpisode() sql_l.append( [ 'SELECT DISTINCT {0} '.format(fields_to_select) + 'FROM tv_episodes e, tv_shows s ' 'WHERE showid = ? ' 'AND airdate <= ? ' 'AND airdate >= ? ' 'AND s.indexer_id = e.showid ' 'AND e.status IN (' + ','.join(['?'] * len(status_list)) + ')', [show_obj.indexerid, next_air_date or today, recently] + status_list ] ) results = [] for sql_i in sql_l: if results: results += db.select(*sql_i) else: results = db.select(*sql_i) for index, item in enumerate(results): results[index][b'localtime'] = sbdatetime.convert_to_setting( parse_date_time(item[b'airdate'], item[b'airs'], item[b'network'])) results[index][b'snatchedsort'] = int(not results[index][b'epstatus'] in SNATCHED) results.sort(key=ComingEpisodes.sorts[sort]) if not group: return results grouped_results = ComingEpisodes._get_categories_map(categories) for result in results: if result[b'paused'] and not paused: continue result[b'airs'] = str(result[b'airs']).replace('am', ' AM').replace('pm', ' PM').replace(' ', ' ') result[b'airdate'] = result[b'localtime'].toordinal() if result[b'epstatus'] in SNATCHED: if result[b'location']: continue else: category = 'snatched' elif result[b'airdate'] < today: category = 'missed' elif result[b'airdate'] >= next_week: category = 'later' elif result[b'airdate'] == today: category = 'today' else: category = 'soon' if len(categories) > 0 and category not in categories: continue if not result[b'network']: result[b'network'] = '' result[b'quality'] = get_quality_string(result[b'quality']) result[b'airs'] = sbdatetime.sbftime(result[b'localtime'], t_preset=timeFormat).lstrip('0').replace(' 0', ' ') result[b'weekday'] = 1 + result[b'localtime'].weekday() result[b'tvdbid'] = result[b'indexer_id'] result[b'airdate'] = sbdatetime.sbfdate(result[b'localtime'], d_preset=dateFormat) result[b'localtime'] = result[b'localtime'].toordinal() grouped_results[category].append(result) return grouped_results