def load_shows_from_db(): """ Populates the showList with shows from the database """ test_main_db_con = test.db.DBConnection() sql_results = test_main_db_con.select("SELECT * FROM tv_shows") for sql_show in sql_results: try: cur_show = TVShow(int(sql_show[b"indexer"]), int(sql_show[b"indexer_id"])) sickbeard.showList.append(cur_show) except Exception: # pylint: disable=broad-except pass
def loadShowsFromDB(): myDB = db.DBConnection() sqlResults = myDB.select("SELECT * FROM tv_shows") for sqlShow in sqlResults: try: curShow = TVShow(int(sqlShow["tvdb_id"])) sickbeard.showList.append(curShow) except Exception, e: logger.log( u"There was an error creating the show in " + sqlShow["location"] + ": " + str(e).decode('utf-8'), logger.ERROR) logger.log(traceback.format_exc(), logger.DEBUG)
def test_get_episode(): """ Test get episodes """ show = TVShow(1, 1, "en") show.name = "show name" show.network = "cbs" show.genre = "crime" show.runtime = 40 show.status = "Ended" show.default_ep_status = "5" show.airs = "monday" show.startyear = 1987 show.saveToDB() sickbeard.showList = [show]
def loadFromDB(self): """ Populates the showList with shows from the database """ myDB = test.db.DBConnection() sqlResults = myDB.select("SELECT * FROM tv_shows") for sqlShow in sqlResults: try: curShow = TVShow(int(sqlShow["indexer"]), int(sqlShow["indexer_id"])) sickbeard.showList.append(curShow) except Exception, e: print "There was an error creating the show"
def loadShowsFromDB(self): """ Populates the showList with shows from the database """ myDB = test.db.DBConnection() sqlResults = myDB.select('SELECT * FROM tv_shows') for sqlShow in sqlResults: try: curShow = TVShow(int(sqlShow['indexer']), int(sqlShow['indexer_id'])) sickbeard.showList.append(curShow) except Exception: pass
def setUpClass(cls): num_legacy_shows = 3 num_shows = 3 num_episodes_per_show = 5 cls.mydb = db.DBConnection() cls.legacy_shows = [] cls.shows = [] # Per-show-notifications were originally added for email notifications only. To add # this feature to other notifiers, it was necessary to alter the way text is stored in # one of the DB columns. Therefore, to test properly, we must create some shows that # store emails in the old method (legacy method) and then other shows that will use # the new method. for show_counter in range(100, 100 + num_legacy_shows): show = TVShow(1, show_counter) show.name = "Show " + str(show_counter) show.episodes = [] for episode_counter in range(0, num_episodes_per_show): episode = TVEpisode(show, test.SEASON, episode_counter) episode.name = "Episode " + str(episode_counter + 1) episode.quality = "SDTV" show.episodes.append(episode) show.saveToDB() cls.legacy_shows.append(show) for show_counter in range(200, 200 + num_shows): show = TVShow(1, show_counter) show.name = "Show " + str(show_counter) show.episodes = [] for episode_counter in range(0, num_episodes_per_show): episode = TVEpisode(show, test.SEASON, episode_counter) episode.name = "Episode " + str(episode_counter + 1) episode.quality = "SDTV" show.episodes.append(episode) show.saveToDB() cls.shows.append(show)
def test_process(self): show = TVShow(1,3) show.name = test.SHOWNAME show.location = test.SHOWDIR show.saveToDB() sickbeard.showList = [show] ep = TVEpisode(show, test.SEASON, test.EPISODE) ep.name = "some ep name" ep.saveToDB() addNameToCache('show name', 3) sickbeard.PROCESS_METHOD = 'move' pp = PostProcessor(test.FILEPATH) self.assertTrue(pp.process())
def load_shows_from_db(): """ Populates the showList with shows from the database """ my_db = test.db.DBConnection() sql_result = my_db.select( 'SELECT indexer AS tvid, indexer_id AS prodid FROM tv_shows') for cur_result in sql_result: try: show_obj = TVShow(int(cur_result['tvid']), int(cur_result['prodid'])) sickbeard.showList.append(show_obj) except (BaseException, Exception): pass
def execute(self): ShowQueueItem.execute(self) logger.log(u"Starting to add show "+self.showDir) try: # make sure the tvdb ids are valid try: ltvdb_api_parms = sickbeard.TVDB_API_PARMS.copy() if self.lang: ltvdb_api_parms['language'] = self.lang logger.log(u"TVDB: "+repr(ltvdb_api_parms)) t = tvdb_api.Tvdb(**ltvdb_api_parms) s = t[self.tvdb_id] # this usually only happens if they have an NFO in their show dir which gave us a TVDB ID that has no # proper english version of the show if not s or not s['seriesname']: ui.flash.error("Unable to add show", "Show in "+self.showDir+" has no name on TVDB, probably the wrong language. Delete .nfo and add manually in the correct language.") self._finishEarly() return except tvdb_exceptions.tvdb_exception, e: logger.log(u"Error contacting TVDB: "+str(e), logger.ERROR) ui.flash.error("Unable to add show", "Unable to look up the show in "+self.showDir+" on TVDB, not using the NFO. Delete .nfo and add manually in the correct language.") self._finishEarly() return # clear the name cache name_cache.clearCache() newShow = TVShow(self.tvdb_id, self.lang) newShow.loadFromTVDB() self.show = newShow # set up initial values self.show.location = self.showDir self.show.quality = self.quality if self.quality else sickbeard.QUALITY_DEFAULT self.show.seasonfolders = self.season_folders if self.season_folders != None else sickbeard.SEASON_FOLDERS_DEFAULT self.show.paused = False # be smartish about this if self.show.genre and "talk show" in self.show.genre.lower(): self.show.air_by_date = 1
def load_shows_from_db(): """ Populates the showList with shows from the database """ logger.log(u'Loading initial show list') my_db = db.DBConnection() sql_result = my_db.select('SELECT indexer AS tv_id, indexer_id AS prod_id, location FROM tv_shows') sickbeard.showList = [] for cur_result in sql_result: try: show_obj = TVShow(int(cur_result['tv_id']), int(cur_result['prod_id'])) sickbeard.showList.append(show_obj) except (BaseException, Exception) as err: logger.log('There was an error creating the show in %s: %s' % ( cur_result['location'], ex(err)), logger.ERROR)
def test(self): global searchItems searchItems = curData["i"] show = TVShow(tvdbdid) show.name = show_name show.quality = curData["q"] show.saveToDB() sickbeard.showList.append(show) for epNumber in curData["e"]: episode = TVEpisode(show, curData["s"], epNumber) episode.status = c.WANTED episode.saveToDB() bestResult = search.findEpisode(episode, forceSearch) if not bestResult: self.assertEqual(curData["b"], bestResult) self.assertEqual(curData["b"], bestResult.name) #first is expected, second is choosen one
def setUp(self): super(TVFindTests, self).setUp() sickbeard.showList = [] sickbeard.showDict = {} sickbeard.indexermapper.indexer_list = [ i for i in TVInfoAPI().all_sources ] for show in shows: sh = TVShow(show['tvid'], show['prodid']) ids = copy.deepcopy(ids_base) if show.get('ids'): for sub_ids in show['ids']: ids[sub_ids].update(show['ids'][sub_ids]) ids[show['tvid']]['status'] = indexermapper.MapStatus.SOURCE ids[show['tvid']]['id'] = show['prodid'] sh.ids = ids sickbeard.showList.append(sh) sickbeard.showDict[sh.sid_int] = sh
def test_process(self): show_obj = TVShow(1, 3) show_obj.tvid = TVINFO_TVDB show_obj.name = test.SHOWNAME show_obj.location = test.SHOWDIR show_obj.save_to_db() sickbeard.showList = [show_obj] ep_obj = TVEpisode(show_obj, test.SEASON, test.EPISODE) ep_obj.name = 'some ep name' ep_obj.release_name = 'test setter' ep_obj.save_to_db() addNameToCache('show name', tvid=TVINFO_TVDB, prodid=3) sickbeard.PROCESS_METHOD = 'move' pp = PostProcessor(test.FILEPATH) self.assertTrue(pp.process())
def test_change_indexerid(self): show_obj = TVShow(1, 1, 'en') show_obj.name = 'show name' show_obj.tvrname = 'show name' show_obj.network = 'cbs' show_obj.genre = 'crime' show_obj.runtime = 40 show_obj.status = '5' show_obj.airs = 'monday' show_obj.startyear = 1987 show_obj.save_to_db() show_obj.load_from_db() show_obj.prodid = 2 show_obj.save_to_db() show_obj.load_from_db() self.assertEqual(show_obj.prodid, 2)
def load_shows_from_db(): """ Populates the showList with shows from the database """ logger.log(u'Loading initial show list') my_db = db.DBConnection() sql_results = my_db.select('SELECT * FROM tv_shows') sickbeard.showList = [] for sqlShow in sql_results: try: cur_show = TVShow(int(sqlShow['indexer']), int(sqlShow['indexer_id'])) cur_show.nextEpisode() sickbeard.showList.append(cur_show) except Exception as er: logger.log('There was an error creating the show in %s: %s' % ( sqlShow['location'], str(er).decode('utf-8', 'replace')), logger.ERROR)
def test_change_indexerid(self): show = TVShow(1, 1, "en") show.name = "show name" show.tvrname = "show name" show.network = "cbs" show.genre = "crime" show.runtime = 40 show.status = "5" show.airs = "monday" show.startyear = 1987 show.saveToDB() show.loadFromDB(skipNFO=True) show.indexerid = 2 show.saveToDB() show.loadFromDB(skipNFO=True) self.assertEqual(show.indexerid, 2)
def loadShowsFromDB(): """ Populates the showList with shows from the database """ with db.DBConnection() as myDB: sqlResults = myDB.select("SELECT * FROM tv_shows") for sqlShow in sqlResults: try: curShow = TVShow(int(sqlShow["indexer"]), int(sqlShow["indexer_id"])) sickbeard.showList.append(curShow) except Exception, e: logger.log( u"There was an error creating the show in " + sqlShow["location"] + ": " + str(e).decode('utf-8'), logger.ERROR) logger.log(traceback.format_exc(), logger.DEBUG)
def test_process(self): """ Test process """ show = TVShow(1, 3) show.name = test.SHOW_NAME show.location = test.SHOW_DIR show.saveToDB() sickbeard.showList = [show] episode = TVEpisode(show, test.SEASON, test.EPISODE) episode.name = "some episode name" episode.saveToDB() addNameToCache('show name', 3) sickbeard.PROCESS_METHOD = 'move' post_processor = PostProcessor(test.FILE_PATH) self.assertTrue(post_processor.process())
def test_change_indexerid(self): show = TVShow(1, 1, 'en') show.name = 'show name' show.tvrname = 'show name' show.network = 'cbs' show.genre = 'crime' show.runtime = 40 show.status = '5' show.airs = 'monday' show.startyear = 1987 show.saveToDB() show.loadFromDB(skipNFO=True) show.indexerid = 2 show.saveToDB() show.loadFromDB(skipNFO=True) self.assertEqual(show.indexerid, 2)
def load_shows_from_db(): """ Populates the showList with shows from the database """ logger.log('Loading initial show list', logger.DEBUG) main_db_con = db.DBConnection() sql_results = main_db_con.select('SELECT indexer, indexer_id, location FROM tv_shows;') sickbeard.showList = [] for sql_show in sql_results: try: cur_show = TVShow(sql_show[b'indexer'], sql_show[b'indexer_id']) cur_show.nextEpisode() sickbeard.showList.append(cur_show) except Exception as error: # pylint: disable=broad-except logger.log('There was an error creating the show in {0}: Error {1}'.format (sql_show[b'location'], error), logger.ERROR) logger.log(traceback.format_exc(), logger.DEBUG)
def test(self): global searchItems searchItems = curData['i'] show_obj = TVShow(1, tvdbdid) show_obj.name = show_name show_obj.quality = curData['q'] show_obj.save_to_db() sickbeard.showList.append(show_obj) sickbeard.showDict[show_obj.sid_int] = show_obj episode = None for epNumber in curData['e']: episode = TVEpisode(show_obj, curData['s'], epNumber) episode.status = c.WANTED episode.save_to_db() bestResult = search.search_providers(show_obj, episode.season, episode.episode, forceSearch) if not bestResult: self.assertEqual(curData['b'], bestResult) self.assertEqual(curData['b'], bestResult.name) #first is expected, second is choosen one
def loadShowsFromDB(): """ Populates the showList with shows from the database """ logger.log(u"Loading initial show list", logger.DEBUG) myDB = db.DBConnection() sqlResults = myDB.select("SELECT indexer, indexer_id, location FROM tv_shows;") sickbeard.showList = [] for sqlShow in sqlResults: try: curShow = TVShow(int(sqlShow["indexer"]), int(sqlShow["indexer_id"])) curShow.nextEpisode() sickbeard.showList.append(curShow) except Exception, e: logger.log( u"There was an error creating the show in " + sqlShow["location"] + ": " + str(e).decode('utf-8'), logger.ERROR) logger.log(traceback.format_exc(), logger.DEBUG)
def execute(self): ShowQueueItem.execute(self) logger.log(u"Starting to add show " + self.showDir) try: # make sure the tvdb ids are valid try: ltvdb_api_parms = sickbeard.TVDB_API_PARMS.copy() if self.lang: ltvdb_api_parms['language'] = self.lang t = tvdb_api.Tvdb(**ltvdb_api_parms) s = t[self.tvdb_id] if not s or not s['seriesname']: ui.flash.error( "Unable to add show", "Show in " + str(self.showDir) + " has no name on TVDB, probably the wrong language. Delete .nfo and add manually in the correct language." ) self._finishEarly() return except tvdb_exceptions.tvdb_exception, e: ui.flash.error( "Unable to add show", "Unable to look up the show in " + str(self.showDir) + " on TVDB, not using the NFO. Delete .nfo and add manually in the correct language." ) self._finishEarly() return newShow = TVShow(self.tvdb_id, self.lang) newShow.loadFromTVDB() self.show = newShow # set up initial values self.show.location = self.showDir self.show.quality = self.quality if self.quality else sickbeard.QUALITY_DEFAULT self.show.seasonfolders = self.season_folders if self.season_folders != None else sickbeard.SEASON_FOLDERS_DEFAULT self.show.paused = False
def test_change_indexerid(self): """ test change indexer id """ show = TVShow(1, 1, "en") show.name = "show name" show.network = "cbs" show.genre = "crime" show.runtime = 40 show.status = "Ended" show.default_ep_status = "5" show.airs = "monday" show.startyear = 1987 show.saveToDB() show.loadFromDB() show.indexerid = 2 show.saveToDB() show.loadFromDB() self.assertEqual(show.indexerid, 2)
def do_test(): """ Test to perform """ global search_items # pylint: disable=global-statement search_items = cur_data["i"] show = TVShow(1, tvdb_id) show.name = show_name show.quality = cur_data["q"] show.saveToDB() sickbeard.showList.append(show) episode = None for epNumber in cur_data["e"]: episode = TVEpisode(show, cur_data["s"], epNumber) episode.status = common.WANTED episode.saveToDB() best_result = search.searchProviders(show, episode.episode, force_search) if not best_result: assert cur_data["b"] == best_result # pylint: disable=no-member assert cur_data["b"] == best_result.name # first is expected, second is chosen one
def setUp(self): sickbeard.showList = [] setup_test_db() setup_test_episode_file() setup_test_show_dir() setup_test_processing_dir() show = TVShow(1, 1, 'en') show.name = SHOW_NAME show.location = FILE_DIR show.episodes = {} for season in range(1, NUM_SEASONS): show.episodes[season] = {} for episode in range(1, EPISODES_PER_SEASON): if season == SEASON and episode == EPISODE: episode = TVEpisode(show, season, episode, ep_file=FILE_PATH) else: episode = TVEpisode(show, season, episode) show.episodes[season][episode] = episode episode.saveToDB() show.saveToDB() sickbeard.showList = [show]
def test(self): self.showDir = test_lib.setUp_test_show_dir(show_name) self.filePath = test_lib.setUp_test_episode_file( None, curData["b"] + ".mkv") show = TVShow(tvdbdid) show.name = show_name show.quality = curData["q"] show.location = self.showDir if curData["anime"]: show.anime = 1 show.saveToDB() sickbeard.showList.append(show) for epNumber in curData["e"]: episode = TVEpisode(show, curData["s"], epNumber) episode.status = c.WANTED if "ab" in curData: episode.absolute_number = curData["ab"] episode.saveToDB() pp = PostProcessor(self.filePath) self.assertTrue(pp.process())
def test_set_name(self): show = TVShow(1, 1, 'en') show.name = 'newName' show.saveToDB() show.loadFromDB(skipNFO=True) self.assertEqual(show.name, 'newName')
def test_init_indexerid(self): show = TVShow(1, 1, 'en') self.assertEqual(show.indexerid, 1)
def do_test(self): """ Test to perform """ show = TVShow(1, int(cur_data["tvdbid"])) show.name = cur_name show.quality = common.ANY | common.Quality.UNKNOWN | common.Quality.RAWHDTV show.saveToDB() sickbeard.showList.append(show) for ep_number in cur_data["e"]: episode = TVEpisode(show, cur_data["s"], ep_number) episode.status = common.WANTED # We aren't updating scene numbers, so fake it here episode.scene_season = cur_data["s"] episode.scene_episode = ep_number episode.saveToDB() cur_provider.show = show season_strings = cur_provider._get_season_search_strings(episode) # pylint: disable=protected-access episode_strings = cur_provider._get_episode_search_strings(episode) # pylint: disable=protected-access fail = False cur_string = '' for cur_string in season_strings, episode_strings: if not all([ isinstance(cur_string, list), isinstance(cur_string[0], dict) ]): print " {0!s} is using a wrong string format!".format( cur_provider.name) print cur_string fail = True continue if fail: continue try: assert season_strings == cur_data["s_strings"] assert episode_strings == cur_data["e_strings"] except AssertionError: print " {0!s} is using a wrong string format!".format( cur_provider.name) print cur_string continue search_strings = episode_strings[0] # search_strings.update(season_strings[0]) # search_strings.update({"RSS":['']}) # print search_strings if not cur_provider.public: continue items = cur_provider.search(search_strings) # pylint: disable=protected-access if not items: print "No results from cur_provider?" continue title, url = cur_provider._get_title_and_url(items[0]) # pylint: disable=protected-access for word in show.name.split(" "): if not word.lower() in title.lower(): print "Show cur_name not in title: {0!s}. URL: {1!s}".format( title, url) continue if not url: print "url is empty" continue quality = cur_provider.get_quality(items[0]) size = cur_provider._get_size(items[0]) # pylint: disable=protected-access if not show.quality & quality: print "Quality not in common.ANY, {0!r} {1!s}".format( quality, size) continue