def download(sub_id, option_id, filename, stack=False): result = None subtitle_list = [] exts = [".srt", ".sub"] downloader = TorecSubtitlesDownloader() start_time = time.time() delete_old_subs() try: result = downloader.get_download_link(sub_id, option_id) except Exception as e: log(__name__,"failed to connect to service for subtitle download %s" % e) return subtitle_list if result is not None: log(__name__, "Downloading subtitles from '%s'" % result) (subtitle_data, subtitle_name) = downloader.download(result) (file_name, file_ext) = os.path.splitext(subtitle_name) archive_file = os.path.join(__temp__, "Torec%s" % file_ext) with open(archive_file, "wb") as subFile: subFile.write(subtitle_data) xbmc.executebuiltin( ('XBMC.Extract("%s","%s")' % (archive_file, __temp__,) ).encode('utf-8'), True) for file_ in xbmcvfs.listdir(__temp__)[1]: ufile = file_.decode('utf-8') log(__name__, "file=%s" % ufile) file_ = os.path.join(__temp__, ufile) if os.path.splitext(ufile)[1] in exts: convert_to_utf(file_) subtitle_list.append(file_) log(__name__, "Overall download took %f" % (time.time() - start_time)) return subtitle_list
class MovieTests(unittest.TestCase): @classmethod def setUpClass(self): self.downloader = TorecSubtitlesDownloader() def test_search_movie_sanity(self): item = self._create_test_valid_item() options = self.downloader.search_movie(item['title']) self.assertIsNotNone(options) self.assertEqual(len(options), 22) def test_search_inexisting_movie(self): item = { 'title': 'finding mori', } options = self.downloader.search_movie(item['title']) self.assertIsNone(options) def test_download_movie_sanity(self): item = self._create_test_valid_item() options = self.downloader.search_movie(item['title']) option = options[0] page_id = option.sub_id subtitle_id = option.option_id result = self.downloader.get_download_link(page_id, subtitle_id) subtitleData, fileName = self.downloader.download(result) self.assertIsNotNone(subtitleData) self._assert_subtitle_data(subtitleData, fileName) def _create_test_valid_item(self): return { 'title': 'finding dory', } def _assert_subtitle_data(self, subtitleData, fileName): extension = os.path.splitext(fileName)[1] temp = tempfile.NamedTemporaryFile() temp.write(subtitleData) temp.flush() if (extension == ".zip"): rf = zipfile.ZipFile(temp.name) elif (extension == ".rar"): rf = rarfile.RarFile(temp.name) else: fail("unknown extension found %s", extension) for f in rf.infolist(): data = rf.read(f.filename) temp = tempfile.NamedTemporaryFile() temp.write(data) temp.flush() self.assertIsNotNone(temp.read()) break
class TVShowTests(unittest.TestCase): @classmethod def setUpClass(self): self.downloader = TorecSubtitlesDownloader() def test_search_tvshow_sanity(self): item = self._create_test_valid_item() options = self.downloader.search_tvshow(item['tvshow'], item['season'], item['episode']) self.assertIsNotNone(options) self.assertGreaterEqual(len(options), 5) def test_search_tvshow_last_season_episode(self): item = {'tvshow': 'house of cards', 'season': '3', 'episode': '13'} options = self.downloader.search_tvshow(item['tvshow'], item['season'], item['episode']) self.assertIsNotNone(options) self.assertGreaterEqual(len(options), 1) def test_search_inexisting_tvshow(self): item = {'tvshow': 'house of lards', 'season': '3', 'episode': '1'} options = self.downloader.search_tvshow(item['tvshow'], item['season'], item['episode']) self.assertIsNone(options) def test_search_existing_tvshow_with_no_subtitles(self): item = {'tvshow': 'Cowboy Bebop', 'season': '1', 'episode': '1'} options = self.downloader.search_tvshow(item['tvshow'], item['season'], item['episode']) self.assertIsNone(options) def test_download_tvshow_sanity(self): item = self._create_test_valid_item() options = self.downloader.search_tvshow(item['tvshow'], item['season'], item['episode']) option = options[-1] page_id = option.sub_id subtitle_id = option.option_id download_link = self.downloader.get_download_link(page_id, subtitle_id) self.assertTrue(len(download_link) != 0) subtitleData, fileName = self.downloader.download(download_link) self.assertIsNotNone(subtitleData) self._assert_subtitle_data(subtitleData, fileName) def _create_test_valid_item(self): return {'tvshow': 'house of cards', 'season': '3', 'episode': '1'} def _assert_subtitle_data(self, subtitleData, fileName): extension = os.path.splitext(fileName)[1] temp = tempfile.NamedTemporaryFile() temp.write(subtitleData) temp.flush() if (extension == ".zip"): rf = zipfile.ZipFile(temp.name) elif (extension == ".rar"): rf = rarfile.RarFile(temp.name) else: fail("unknown extension found %s", extension) for f in rf.infolist(): data = rf.read(f.filename) temp = tempfile.NamedTemporaryFile() temp.write(data) temp.flush() self.assertIsNotNone(temp.read()) break