def test_replacing_video_for_path_removes_downloads(self): path = "/data/Series/Season 1/01 Title.mkv" video = Video.fromname("Series.S01E02.Title.720p.WEB-DL.DD5.1.H264-ReleaseGroup.mkv") self.datastore.add_video(path, video) provider = "davessubs" sub_id = "ABC123" lang = Language.fromietf("en") score = 123 self.datastore.add_download(path, provider, sub_id, lang, score) video2 = Video.fromname("Series.S01E02.Title.720p.BDRip-ReleaseGroup2.mkv") self.datastore.add_video(path, video) downloads = self.datastore.get_downloads_for_video(path) self.assertEqual(downloads, {})
def data(): return { 'release_name': 'Show.Name.2012.S01E02.Episode.Title.1080p.HDTV.x265.AC3-Group', 'release_properties': { 'series': 'Show Name', 'season': 1, 'episode': 2, 'title': 'Episode Title', 'year': 2012, 'source': 'HDTV', 'resolution': '1080p', 'release_group': 'Group', 'video_codec': 'H.265', 'audio_codec': 'AC3' }, 'another_release_name': 'Different.Show.2013.S03E04.Another.Episode.720p.BluRay.x264-NoGroup', 'video': Video.fromname('Show.Name.S01E02.mkv'), 'video_properties': { 'series': 'Show Name', 'season': 1, 'episode': 2, 'title': None, 'year': None, 'source': None, 'resolution': None, 'release_group': None, 'video_codec': None, 'audio_codec': None, } }
def test_added_subs_are_returned_by_lang(self): path = "/data/Series/Season 1/01 Title.mkv" video = Video.fromname("Series.S01E02.Title.720p.WEB-DL.DD5.1.H264-ReleaseGroup.mkv") self.datastore.add_video(path, video) provider1 = "davessubs" sub_id1 = "ABC123" lang1 = Language.fromietf("en") score1 = 123 provider2 = "stevesubs" sub_id2 = "steve123" lang2 = lang1 score2 = 120 provider3 = "pablosubs" sub_id3 = "umdoistres" lang3 = Language.fromietf("pt-BR") score3 = 150 self.datastore.add_download(path, provider1, sub_id1, lang1, score1) self.datastore.add_download(path, provider2, sub_id2, lang2, score2) self.datastore.add_download(path, provider3, sub_id3, lang3, score3) downloads = self.datastore.get_downloads_for_video(path) self.assertEqual( downloads, { lang1: [ {"provider": provider1, "sub_id": sub_id1, "lang": lang1, "score": score1}, {"provider": provider2, "sub_id": sub_id2, "lang": lang2, "score": score2}, ], lang3: [{"provider": provider3, "sub_id": sub_id3, "lang": lang3, "score": score3}], }, )
def test_newly_added_video_has_no_downloads(self): path = "/data/Series/Season 1/01 Title.mkv" video = Video.fromname("Series.S01E02.Title.720p.WEB-DL.DD5.1.H264-ReleaseGroup.mkv") self.datastore.add_video(path, video) downloads = self.datastore.get_downloads_for_video(path) self.assertEqual(downloads, {})
def test_added_sub_is_returned(self): path = "/data/Series/Season 1/01 Title.mkv" video = Video.fromname("Series.S01E02.Title.720p.WEB-DL.DD5.1.H264-ReleaseGroup.mkv") self.datastore.add_video(path, video) provider = "davessubs" sub_id = "ABC123" lang = Language.fromietf("en") score = 123 self.datastore.add_download(path, provider, sub_id, lang, score) downloads = self.datastore.get_downloads_for_video(path) self.assertEqual(downloads, {lang: [{"provider": provider, "sub_id": sub_id, "lang": lang, "score": score}]})
def data(create_tvshow, create_tvepisode): show_name = 'Enhanced Show Name' show_year = 2012 tvshow = create_tvshow(indexerid=12, name='{0} ({1})'.format(show_name, show_year), imdb_id='tt0000000') tvepisode = create_tvepisode(show=tvshow, indexer=34, season=3, episode=4, name='Episode Title', file_size=1122334455, status=Quality.composite_status( DOWNLOADED, Quality.FULLHDBLURAY), release_group='SuperGroup') return { 'tvshow': tvshow, 'tvshow_properties': { 'series': show_name, 'year': show_year, 'series_tvdb_id': tvshow.tvdb_id, 'series_imdb_id': tvshow.imdb_id, }, 'tvepisode': tvepisode, 'tvepisode_properties': { 'season': tvepisode.season, 'episode': tvepisode.episode, 'title': tvepisode.name, 'resolution': '1080p', 'format': 'BluRay', 'release_group': tvepisode.release_group, 'size': tvepisode.file_size, 'tvdb_id': tvepisode.tvdb_id, }, 'video': Video.fromname('Show.Name.S01E02.mkv'), 'video_properties': { 'series': 'Show Name', 'season': 1, 'episode': 2, 'title': None, 'year': None, 'resolution': None, 'format': None, 'release_group': None, 'size': None, 'series_tvdb_id': None, 'series_imdb_id': None, 'tvdb_id': None, } }
def test_video_fromname_movie(movies): video = Video.fromname(movies['man_of_steel'].name) assert type(video) is Movie assert video.name == movies['man_of_steel'].name assert video.format == movies['man_of_steel'].format assert video.release_group == movies['man_of_steel'].release_group assert video.resolution == movies['man_of_steel'].resolution assert video.video_codec == movies['man_of_steel'].video_codec assert video.audio_codec is None assert video.imdb_id is None assert video.hashes == {} assert video.size is None assert video.subtitle_languages == set() assert video.title == movies['man_of_steel'].title assert video.year == movies['man_of_steel'].year
def test_video_fromname_episode_no_season(episodes): video = Video.fromname(episodes['the_jinx_e05'].name) assert type(video) is Episode assert video.name == episodes['the_jinx_e05'].name assert video.format == episodes['the_jinx_e05'].format assert video.release_group == episodes['the_jinx_e05'].release_group assert video.resolution == episodes['the_jinx_e05'].resolution assert video.video_codec == episodes['the_jinx_e05'].video_codec assert video.audio_codec is None assert video.imdb_id is None assert video.hashes == {} assert video.size is None assert video.subtitle_languages == set() assert sanitize(video.series) == sanitize(episodes['the_jinx_e05'].series) assert video.season == episodes['the_jinx_e05'].season assert video.episode == episodes['the_jinx_e05'].episode assert video.title is None assert video.year is None assert video.tvdb_id is None
def test_video_fromname_episode(episodes): video = Video.fromname(episodes['bbt_s07e05'].name) assert type(video) is Episode assert video.name == episodes['bbt_s07e05'].name assert video.source == episodes['bbt_s07e05'].source assert video.release_group == episodes['bbt_s07e05'].release_group assert video.resolution == episodes['bbt_s07e05'].resolution assert video.video_codec == episodes['bbt_s07e05'].video_codec assert video.audio_codec is None assert video.imdb_id is None assert video.hashes == {} assert video.size is None assert video.subtitle_languages == set() assert video.series == episodes['bbt_s07e05'].series assert video.season == episodes['bbt_s07e05'].season assert video.episode == episodes['bbt_s07e05'].episode assert video.title is None assert video.year is None assert video.tvdb_id is None
def test_video_fromname_episode(episodes): video = Video.fromname(episodes['bbt_s07e05'].name) assert type(video) is Episode assert video.name == episodes['bbt_s07e05'].name assert video.format == episodes['bbt_s07e05'].format assert video.release_group == episodes['bbt_s07e05'].release_group assert video.resolution == episodes['bbt_s07e05'].resolution assert video.video_codec == episodes['bbt_s07e05'].video_codec assert video.audio_codec is None assert video.imdb_id is None assert video.hashes == {} assert video.size is None assert video.subtitle_languages == set() assert video.series == episodes['bbt_s07e05'].series assert video.season == episodes['bbt_s07e05'].season assert video.episode == episodes['bbt_s07e05'].episode assert video.title is None assert video.year is None assert video.tvdb_id is None
def test_get_incomplete_videos(self, name, videos, expected): for video in videos: added = datetime.utcnow() - video["age"] if "age" in video else timedelta(0) self.datastore.add_video(video["path"], Video.fromname(video["name"]), added) for provider, sub_id, lang, score in video["downloads"]: self.datastore.add_download(video["path"], provider, sub_id, Language.fromietf(lang), score) lang1 = Language.fromietf("en") lang2 = Language.fromietf("pt-BR") incomplete = self.datastore.get_incomplete_videos( [lang1, lang2], 80, 100, datetime.utcnow() - timedelta(days=1) ) self.assertEqual(len(incomplete), len(expected)) for video_idx, needs in expected: actual = next(video for video in incomplete if video["path"] == videos[video_idx]["path"]) self.assertEqual(actual["video"].name, videos[video_idx]["name"]) self.assertEqual(len(actual["needs"]), len(needs)) for lang, score in needs: actual_need = next(need for need in actual["needs"] if str(need["lang"]) == lang) self.assertEqual(actual_need["current_score"], score)
def video(): return Video.fromname('Show.Name.S03E04.mkv')
x = 'n' while x != 'y': index = randint(0, countGS - 1) print("Launching " + str(stashnames[index])) findGenre(stashnames[index]) print("\n\n......Good enough? Y/N\n") x = str(getch(), 'utf-8') print( "\n=================================================================================\n" ) if x.lower() == 'y': if dlSub == True: print("\n\nGetting subtitles..Please Wait..\n\n") try: region.configure('dogpile.cache.dbm', arguments={'filename': 'cachefile.dbm'}) videos = Video.fromname(stash[index]) subtitles = download_best_subtitles([videos], {Language('eng')}) best_subtitle = subtitles[videos][0] save_subtitles(videos, [best_subtitle]) print("\nSubtitle downloaded.\n") except: print("\nCould not get subtitle :\\\n") os.startfile(stash[index]) elif x.lower() == 'n': print("Moving on...\n") else: print("\nWut? wut? i'll just assume it wasn't of your taste sire.\n")
def findGenre(search): # store=["True","0000000"] nsearch = "" # c=0 # if search[0].isnumeric(): # search=search[0:7] # for i in search: # if i=="." or i.isspace(): # nsearch=nsearch+" " # else: # nsearch=nsearch+i # else: # for i in search: # if i.isnumeric(): # if c<1: # nsearch=nsearch+i # c+=1 # elif i=="." or i.isspace(): # nsearch=nsearch+" " # else: # nsearch=nsearch+i # if c>1: # break try: global store store = loadKey() global apikey if store[0] == False: apikey = store[1] elif store[0] == True: ak = input("Enter api key\n") store[1] = ak store[0] = False apikey = store[1] except Exception as e: print("No key found\n") ak = input("Enter api key\n") store[0] = False store[1] = ak apikey = store[1] storeKey(store) global apikeyurl apikeyurl = '&apikey=' + apikey # if nsearch[len(nsearch)-1].isnumeric(): # nsearch=nsearch[0:len(nsearch)-1] videos = Video.fromname(stash[index]) nsearch = str(videos.title) # print(nsearch) if nsearch == None: nsearch = "qzx120254frerwfdcvs" if search_movie(nsearch.strip()) != False: try: url = serviceurl + urllib.parse.urlencode({'t': abv90[0] }) + apikeyurl print( f'\nBest Match: "{abv90[0].upper()}"\n\nGetting genre now... \n' ) uh = urllib.request.urlopen(url) # print(url+"\n") data = uh.read() json_data = json.loads(data) list_keys = ['Genre'] if json_data['Response'] == 'True': for k in list_keys: if k in list(json_data.keys()): print(f"{k}: {json_data[k]}") abv90.clear() except Exception as e: if flagIncorrectKey != True: print(f"Error: {e}")
def test_episode_from_guess_multi_episode(episodes): video = Video.fromname( episodes['Marvels.Agents.of.S.H.I.E.L.D.S05E01-E02'].name) # Multi-ep is converted to single-ep by taking the lowest episode number assert video.episode == episodes[ 'Marvels.Agents.of.S.H.I.E.L.D.S05E01-E02'].episode