From 8096d86be3c8f8dfcbbd624f0a125d57bc64e1e1 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 16:52:28 +0300 Subject: [PATCH 1/6] Added wizdom provider with basic tests --- setup.py | 3 +- subliminal/providers/wizdom.py | 131 ++++++++++++++++++ .../wizdom/test_list_subtitle_episode.yaml | 29 ++++ .../wizdom/test_list_subtitles_movie.yaml | 41 ++++++ tests/test_wizdom.py | 60 ++++++++ 5 files changed, 263 insertions(+), 1 deletion(-) create mode 100644 subliminal/providers/wizdom.py create mode 100644 tests/cassettes/wizdom/test_list_subtitle_episode.yaml create mode 100644 tests/cassettes/wizdom/test_list_subtitles_movie.yaml create mode 100644 tests/test_wizdom.py diff --git a/setup.py b/setup.py index e06596700..a002f626b 100644 --- a/setup.py +++ b/setup.py @@ -75,7 +75,8 @@ def find_version(*file_paths): 'shooter = subliminal.providers.shooter:ShooterProvider', 'subscenter = subliminal.providers.subscenter:SubsCenterProvider', 'thesubdb = subliminal.providers.thesubdb:TheSubDBProvider', - 'tvsubtitles = subliminal.providers.tvsubtitles:TVsubtitlesProvider' + 'tvsubtitles = subliminal.providers.tvsubtitles:TVsubtitlesProvider', + 'wizdom = subliminal.providers.wizdom:WizdomProvider', ], 'subliminal.refiners': [ 'metadata = subliminal.refiners.metadata:refine', diff --git a/subliminal/providers/wizdom.py b/subliminal/providers/wizdom.py new file mode 100644 index 000000000..d5530a2d5 --- /dev/null +++ b/subliminal/providers/wizdom.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +import logging + +from babelfish import Language +from guessit import guessit +import requests +import zipfile +import io +import os + +from . import Provider +from .. import __short_version__ +from ..exceptions import ProviderError +from ..subtitle import Subtitle, fix_line_ending, guess_matches +from ..video import Episode, Movie + +logger = logging.getLogger(__name__) + +_SERVER_API_URL = "http://api.wizdom.xyz/" +_SERVER_ZIP_URL = "http://zip.wizdom.xyz/" + + +class WizdomSubtitle(Subtitle): + """WizDom subtitle.""" + + provider_name = "wizdom" + + def __init__(self, imdb_id, api_dict): + super(WizdomSubtitle, self).__init__(Language('heb')) + + print("Wizdom subtitle created") + + self._imdb_id = imdb_id + self._api_dict = api_dict + + @property + def id(self): + + return self._api_dict['id'] + + @property + def download_url(self): + + return "{0}{1}.zip".format(_SERVER_ZIP_URL, self._api_dict['id']) + + def get_matches(self, video): + + matches = set() + + if isinstance(video, Episode): + matches |= guess_matches(video, guessit( + self._api_dict['versioname'], {'type': 'episode'})) + elif isinstance(video, Movie): + matches |= guess_matches(video, guessit( + self._api_dict['versioname'], {'type': 'movie'})) + else: + logger.info("Got video of unexpected type") + + if video.imdb_id and self._imdb_id == video.imdb_id: + matches.add("imdb_id") + + return matches + + +class WizdomProvider(Provider): + + languages = {Language(l) for l in ['heb']} + + def __init__(self): + + self._session = None + + def initialize(self): + + self._session = requests.Session() + self._session.headers[ + 'User-Agent'] = 'Subliminal/{}'.format(__short_version__) + + def terminate(self): + + self._session.close() + + def query(self, file_name, imdb_id, season=None, episode=None): + + logger.info('Searching subtitles %s', file_name) + + if season is None: + season = 0 + if episode is None: + episode = 0 + + response = self._session.get(_SERVER_API_URL + "search.id.php", + params={"imdb": imdb_id, "season": season, "episode": episode, "version": file_name}) + response.raise_for_status() + + if response.text == "": + return [] + + return [WizdomSubtitle(imdb_id, d) for d in response.json()] + + def list_subtitles(self, video, languages): + + season = episode = None + imdb_id = video.imdb_id + if isinstance(video, Episode): + season = video.season + episode = video.episode + imdb_id = video.series_imdb_id + + return self.query(os.path.basename(video.name), imdb_id, season, episode) + + def download_subtitle(self, subtitle): + + logger.info('Downloading subtitle %r', subtitle) + + response = self._sesson.get(subtitle.download_url) + response.raise_for_status() + + with zipfile.ZipFile(io.BytesIO(response.content)) as f: + for filename in f.namelist(): + root, ext = os.path.splitext(filename) + + if ext in [".srt", ".sub"]: + subtitle.content = fix_line_ending(f.read(filename)) + return + + raise BadSubtitleZipFileError() + + +class BadSubtitleZipFileError(ProviderError): + pass diff --git a/tests/cassettes/wizdom/test_list_subtitle_episode.yaml b/tests/cassettes/wizdom/test_list_subtitle_episode.yaml new file mode 100644 index 000000000..a238229d6 --- /dev/null +++ b/tests/cassettes/wizdom/test_list_subtitle_episode.yaml @@ -0,0 +1,29 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?imdb=tt0944947&episode=10&season=3&version=Game.of.Thrones.S03E10.Mhysa.720p.WEB-DL.DD5.1.H.264-NTb.mkv + response: + body: + string: !!binary | + H4sIAAAAAAAAA6TR3U6DQBAF4HfZa5jMsMvCcke7tL0AmliCf/ECFVMuKA0kjcb47sYfYDWpRX2B + 75yZc/3MDmXbVc2uqEsWsGVRl9A8QLZtm13ZwQZ5RAjJ9qkrwHNwD+fRzNYxaO0CwQocKew0u2UW + q+5ZwEhKpVxmse6uaUsWqBfrNwmE/veIMJw7gJ9Jl4u0TxIOd8YcMTXn/YaVznJ4fAOjfB3nUW9y + T/ijyaeawv9i1hs9lESUhkhTxaMFlSvopLc+8t2ZPqv2H6yOkjDVxi/pry0vDpW2w8VysCQpYxic + WnHEeJzhMLNHXJ7mfuqWzH1zDu8/GGj7ClPee5IUkundvAIAAP//AwAXtKb5UAMAAA== + headers: + CF-RAY: [407499c4b3b46a61-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 13:28:58 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d894053634cabde999d79c3587c8002cd1523021338; expires=Sat, + 06-Apr-19 13:28:58 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/cassettes/wizdom/test_list_subtitles_movie.yaml b/tests/cassettes/wizdom/test_list_subtitles_movie.yaml new file mode 100644 index 000000000..5fbed0754 --- /dev/null +++ b/tests/cassettes/wizdom/test_list_subtitles_movie.yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?episode=0&imdb=tt0770828&season=0&version=man.of.steel.2013.720p.bluray.x264-felony.mkv + response: + body: + string: !!binary | + H4sIAAAAAAAAA6yX226bQBCG34WrVsqugOWYqy4sNW45FXBi1fIFjkm7EjaWHaeNqvbZK1gfxknr + GDsv8M3p/2d2R7+kx3K54vW8mJXStTQr5ri+x6uHsqywKisEm6q8wJNqvSye8E/V0NB9WdXzJ+lK + 4lPpWjJNU9WkK2l1Vy9L6dr+ffWMGBZzHN/j7ICYYCdN+wn2VUPDlLoopJ+8LOfuFqtqxAJY4zTs + osHyBaYuaXPFYbaeTJBTFdPSYQmEq6/B63/Aq3W66QJmeYZu+WcOmIZ1VsJLvhBISl2M8MOHSUUe + AFbXz+6DwLoEeTcxLN7oRtzUzZNiKuhNpipdT3ktJOH6LKEMzxYaiGKe3uJRE2YMM2+F8c7pR734 + th/1vr4HYNvoNjuHNcQW3jZEkSf8oa1BxwoKv8YRgfSzZCf8wfJMhMhyn+2ZmqxdOELqopn6DYpC + OV+/2yxRXjzlUBfmWQJmuzQbTyQrPtwiFUtX5K7DaqsePvKpz9oAKEpuYSuBqvRTeGIyDVDgijwo + VtC1xmvA/85m+MiZsFfAcw8mKZ+c5LsG+h4rstVgl9teQhjwv3a6WwWxGYnPxLgDr8flaEu2dasD + mTAB3+QpQvhFdY8yJ9srKllPKn63176hmrb5BkHiAYixxytEky3rzYsAAXSdaPJrAernATboj+uq + wg36YBYhxSZWRKhFccfntUpgv4yO424P6XbTY3fp/cgKVsJdYXck7hyNtKQqnuAqI7bVDXbQ65aZ + eW4epyZGoyhOaTpGo+Q7ned1ON51wVAt0i2M9jzKLINZm/IFWf9TGIpmEfONWrF7S+mmql7KLOb1 + cFavdyvOlm3z6Myy9aJcNu++/1yN1MABj7z9JWK8x3MawAcFaC856dRvFugNZ3hEXTJGXp72oMxe + Jb7UbNLyUFT3UvjUM0hH1D61xlBpGZRRHpSrDOpJ65reEt6LkAeBF/FBCBeZrXRjCsnvzmULHkTM + S934xkthA5SzGvDIGaJf4gyeIuuSsvGLsg3NINrJ0nmWXFuwA2TTXgP9EhxG2DnUoWV1VXY/yr00 + ogHOM+Ef1r8Z4pE3/zZGbPCFwsUMFoh6FC5eCboshw72mUvDjTX7CWbM/3NoHfUY9YjbW0G9dDsN + I5gzcJNyggSaXCPvFtMB47Ew6KdB89PzoJ3AzZOPQxve5s3kMwIf2YoMIeO/AAAA//8DAL6JfU7a + DgAA + headers: + CF-RAY: [40749faf62716a79-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 13:33:01 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d0270bcbf2bbc4b17b20b50c81e912c051523021580; expires=Sat, + 06-Apr-19 13:33:00 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_wizdom.py b/tests/test_wizdom.py new file mode 100644 index 000000000..7f1afb34c --- /dev/null +++ b/tests/test_wizdom.py @@ -0,0 +1,60 @@ +import pytest +import os +from vcr import VCR +from babelfish import Language + +from subliminal.providers.wizdom import WizdomProvider, WizdomSubtitle + +vcr = VCR(path_transformer=lambda path: path + '.yaml', + record_mode=os.environ.get('VCR_RECORD_MODE', 'once'), + match_on=['method', 'scheme', 'host', + 'port', 'path', 'query', 'body'], + cassette_library_dir=os.path.join('tests', 'cassettes', 'wizdom')) + + +def test_get_matches_no_match(episodes): + + subtitle = WizdomSubtitle("tt0944947", dict(versioname="Game.of.Thrones.S07E07.720p.WEB.H264-STRiFE", + id="190027", score=3)) + matches = subtitle.get_matches(episodes['dallas_2012_s01e03']) + assert matches == set() + + +@pytest.mark.integration +@vcr.use_cassette +def test_list_subtitle_episode(episodes): + + languages = {Language('heb')} + expected_subtitles = {"166995", "4232", "3748", "40068", + "39541", "4231", "46192", "71362", + "40067", "61901"} + + with WizdomProvider() as provider: + subtitles = provider.list_subtitles(episodes['got_s03e10'], languages) + + assert {subtitle.id for subtitle in subtitles} == expected_subtitles + assert {subtitle.language for subtitle in subtitles} == languages + + +@pytest.mark.integration +@vcr.use_cassette +def test_list_subtitles_movie(movies): + + languages = {Language('heb')} + expected_subtitles = {"77724", "24384", "24382", "24368", + "24355", "24386", "24372", "24396", + "24394", "24404", "24351", "24378", + "185106", "24402", "24366", "24400", + "24405", "95805", "62797", "134088", + "155340", "62796", "24359", "24398", + "66283", "24370", "114837", "75722", + "90978", "24380", "24390", "24363", + "24374", "134091", "24361", "24408", + "64634", "134085", "24388", "24357", + "24392", "24353", "24376", "24410"} + + with WizdomProvider() as provider: + subtitles = provider.list_subtitles(movies['man_of_steel'], languages) + + assert {subtitle.id for subtitle in subtitles} == expected_subtitles + assert {subtitle.language for subtitle in subtitles} == languages From febd3d81b8621b1dff45569ce74f567add951578 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 16:52:28 +0300 Subject: [PATCH 2/6] Added wizdom provider with basic tests --- subliminal/extensions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subliminal/extensions.py b/subliminal/extensions.py index 1f378b7f7..7e017f4cf 100644 --- a/subliminal/extensions.py +++ b/subliminal/extensions.py @@ -95,7 +95,8 @@ def unregister(self, entry_point): 'shooter = subliminal.providers.shooter:ShooterProvider', 'subscenter = subliminal.providers.subscenter:SubsCenterProvider', 'thesubdb = subliminal.providers.thesubdb:TheSubDBProvider', - 'tvsubtitles = subliminal.providers.tvsubtitles:TVsubtitlesProvider' + 'tvsubtitles = subliminal.providers.tvsubtitles:TVsubtitlesProvider', + 'wizdom = subliminal.providers.wizdom:WizdomProvider', ]) #: Refiner manager From 650f3fc8b054954ab0d3d94708c499df6b3a6b11 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 17:17:27 +0300 Subject: [PATCH 3/6] Fixed typo bug in download_subtitle --- subliminal/providers/wizdom.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/subliminal/providers/wizdom.py b/subliminal/providers/wizdom.py index d5530a2d5..8daa88ef0 100644 --- a/subliminal/providers/wizdom.py +++ b/subliminal/providers/wizdom.py @@ -28,8 +28,6 @@ class WizdomSubtitle(Subtitle): def __init__(self, imdb_id, api_dict): super(WizdomSubtitle, self).__init__(Language('heb')) - print("Wizdom subtitle created") - self._imdb_id = imdb_id self._api_dict = api_dict @@ -113,7 +111,7 @@ def download_subtitle(self, subtitle): logger.info('Downloading subtitle %r', subtitle) - response = self._sesson.get(subtitle.download_url) + response = self._session.get(subtitle.download_url) response.raise_for_status() with zipfile.ZipFile(io.BytesIO(response.content)) as f: From e640051ca94bbff37d180f857828eb6dd2e5dc53 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 17:17:45 +0300 Subject: [PATCH 4/6] Added download_subtitle test --- tests/test_wizdom.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/test_wizdom.py b/tests/test_wizdom.py index 7f1afb34c..f76390eae 100644 --- a/tests/test_wizdom.py +++ b/tests/test_wizdom.py @@ -58,3 +58,16 @@ def test_list_subtitles_movie(movies): assert {subtitle.id for subtitle in subtitles} == expected_subtitles assert {subtitle.language for subtitle in subtitles} == languages + + +@pytest.mark.integration +@vcr.use_cassette +def test_download_subtitle(movies): + + with WizdomProvider() as provider: + subtitles = provider.list_subtitles( + movies['man_of_steel'], {Language('heb')}) + provider.download_subtitle(subtitles[0]) + + assert subtitles[0].content is not None + assert subtitles[0].is_valid() is True From 489306db91fae0b3cba7d2ecebd35f68d2dde1d4 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 17:28:38 +0300 Subject: [PATCH 5/6] Added some query tests --- .../wizdom/test_download_subtitle.yaml | 615 ++++++++++++++++++ .../wizdom/test_query_file_name_imdb_id.yaml | 41 ++ .../test_query_file_name_series_imdb_id.yaml | 41 ++ ...le_name_series_imdb_id_season_episode.yaml | 29 + tests/test_wizdom.py | 44 ++ 5 files changed, 770 insertions(+) create mode 100644 tests/cassettes/wizdom/test_download_subtitle.yaml create mode 100644 tests/cassettes/wizdom/test_query_file_name_imdb_id.yaml create mode 100644 tests/cassettes/wizdom/test_query_file_name_series_imdb_id.yaml create mode 100644 tests/cassettes/wizdom/test_query_file_name_series_imdb_id_season_episode.yaml diff --git a/tests/cassettes/wizdom/test_download_subtitle.yaml b/tests/cassettes/wizdom/test_download_subtitle.yaml new file mode 100644 index 000000000..bda8df47a --- /dev/null +++ b/tests/cassettes/wizdom/test_download_subtitle.yaml @@ -0,0 +1,615 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?season=0&version=man.of.steel.2013.720p.bluray.x264-felony.mkv&imdb=tt0770828&episode=0 + response: + body: + string: !!binary | + H4sIAAAAAAAAA6yX226bQBCG34WrVsqugOWYqy4sNW45FXBi1fIFjkm7EjaWHaeNqvbZK1gfxknr + GDsv8M3p/2d2R7+kx3K54vW8mJXStTQr5ri+x6uHsqywKisEm6q8wJNqvSye8E/V0NB9WdXzJ+lK + 4lPpWjJNU9WkK2l1Vy9L6dr+ffWMGBZzHN/j7ICYYCdN+wn2VUPDlLoopJ+8LOfuFqtqxAJY4zTs + osHyBaYuaXPFYbaeTJBTFdPSYQmEq6/B63/Aq3W66QJmeYZu+WcOmIZ1VsJLvhBISl2M8MOHSUUe + AFbXz+6DwLoEeTcxLN7oRtzUzZNiKuhNpipdT3ktJOH6LKEMzxYaiGKe3uJRE2YMM2+F8c7pR734 + th/1vr4HYNvoNjuHNcQW3jZEkSf8oa1BxwoKv8YRgfSzZCf8wfJMhMhyn+2ZmqxdOELqopn6DYpC + OV+/2yxRXjzlUBfmWQJmuzQbTyQrPtwiFUtX5K7DaqsePvKpz9oAKEpuYSuBqvRTeGIyDVDgijwo + VtC1xmvA/85m+MiZsFfAcw8mKZ+c5LsG+h4rstVgl9teQhjwv3a6WwWxGYnPxLgDr8flaEu2dasD + mTAB3+QpQvhFdY8yJ9srKllPKn63176hmrb5BkHiAYixxytEky3rzYsAAXSdaPJrAernATboj+uq + wg36YBYhxSZWRKhFccfntUpgv4yO424P6XbTY3fp/cgKVsJdYXck7hyNtKQqnuAqI7bVDXbQ65aZ + eW4epyZGoyhOaTpGo+Q7ned1ON51wVAt0i2M9jzKLINZm/IFWf9TGIpmEfONWrF7S+mmql7KLOb1 + cFavdyvOlm3z6Myy9aJcNu++/1yN1MABj7z9JWK8x3MawAcFaC856dRvFugNZ3hEXTJGXp72oMxe + Jb7UbNLyUFT3UvjUM0hH1D61xlBpGZRRHpSrDOpJ65reEt6LkAeBF/FBCBeZrXRjCsnvzmULHkTM + S934xkthA5SzGvDIGaJf4gyeIuuSsvGLsg3NINrJ0nmWXFuwA2TTXgP9EhxG2DnUoWV1VXY/yr00 + ogHOM+Ef1r8Z4pE3/zZGbPCFwsUMFoh6FC5eCboshw72mUvDjTX7CWbM/3NoHfUY9YjbW0G9dDsN + I5gzcJNyggSaXCPvFtMB47Ew6KdB89PzoJ3AzZOPQxve5s3kMwIf2YoMIeO/AAAA//8DAL6JfU7a + DgAA + headers: + CF-RAY: [4074d1d3f68b6b9d-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 14:07:14 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d78d7167c147a8004ac5ec712cdfb010d1523023634; expires=Sat, + 06-Apr-19 14:07:14 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Cookie: [__cfduid=d78d7167c147a8004ac5ec712cdfb010d1523023634] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://zip.wizdom.xyz/77724.zip + response: + body: + string: !!binary | + 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 + headers: + Accept-Ranges: [bytes] + Access-Control-Allow-Methods: ['GET, POST, OPTIONS'] + Access-Control-Allow-Origin: ['*'] + CF-RAY: [4074d1d836ca6a73-LHR] + Connection: [keep-alive] + Content-Length: ['31209'] + Content-Type: [application/zip] + Date: ['Fri, 06 Apr 2018 14:07:15 GMT'] + ETag: ['"5a7a4b1e-79e9"'] + Last-Modified: ['Wed, 07 Feb 2018 00:41:02 GMT'] + Server: [cloudflare] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/cassettes/wizdom/test_query_file_name_imdb_id.yaml b/tests/cassettes/wizdom/test_query_file_name_imdb_id.yaml new file mode 100644 index 000000000..245c417e5 --- /dev/null +++ b/tests/cassettes/wizdom/test_query_file_name_imdb_id.yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?imdb=tt0770828&version=man.of.steel.2013.720p.bluray.x264-felony.mkv&episode=0&season=0 + response: + body: + string: !!binary | + H4sIAAAAAAAAA6yW326bMBjF34WrVqotsAFDr+ZglnRLAAFro0a5cBqyWSKAktAumvbuEzh/3Kpd + Q9oX+J3j853P9uSP9pit1qIs+DLTrrUlL2C5gOtNluUQ6QaGBOkVnOX1im/hb2SbYJHlZbHVrjQx + 1641QggytStt/VCuMu3a/Xv1gjjiBQwXMHlGjGAvjm8iOEC2CSn1wIh+85NUeHssMrGjYO3TsFWD + FRWkHm69wlFSz2agl/N51mORCkfvwctX4Hkd71KALE3AnfguFKbtnGV4JSqJpNSDAG6+zHK8UbCW + dXYOEuth4N+G6uHtbsTduUXE55LeOEW0notSVsIbsIgyuKxMRYWcHvGkkZmqzttiXPRugn54dxP0 + 7y8VsGt3m12PNcQW3gZi6DOxac9gQQOM7sMAq/Szaif3g6WJlEjSATsyTd384AipB5bop1oK4/z+ + 7l2ClG9TtRfkrAKzg81mJ6K1GO+RhmMZetdhtaceP4r5gLUCIIju1CiVVlmn8ORkGqDE8XTI1+rW + 2u8B35zN+FEwuV5DkfqqSf1kkxcN9BIautNgV/ssVZiy/+bp2yqJzUgGTI576PeFHuzJruV0IGMm + 4TufUmLA8wVIesmxUVE9y8XDsfs2Ii75BJHwh6JxxBvY1B3n0w+hCFgWNvX3BMqXAjv01zrPYYN+ + NosRhQQaUqriD6IoEVbzsjuOu31I9zc99Fb+U8JZpt4VbkfiYaOBGeV8q15l2HW6wZ5l3TIT30vD + mEAwCcKYxlMwiX7RIi1H00MKNnJwNxnzpcoyUV0T/QOuXy2GYTqYfFIUh7+URRD6KJMX5XhZ1ocr + ztVd8t+ZJXWVrZp/3xuvRmzDoQj840vERF+kdKh+KJR48UlP/e4CvRUMTqiHp8BP475aszeJ/wAA + AP//pJdfC4IwFMU/kcP/2OP0jjS2adNVED5K+FJQ0GOfPZxStyTJ+gI/zh3n3HP32bOF4VnytFT4 + 1Au9maintC5QquGNrHhzKbGf/LnyzrgvRMs5k60WeJEtnHnM3vKPujRgLYGpJN8whR/A+ekBri1Y + dJ2XuIqif8Ymo7FDP/T8r63zJs4MHCPbmDYI/sERi8SvPoyiuc7OZMWUpJxUZZ8fyDY7smfHQ22B + XlO8mNECcSfh/ZUQ2LaISQoJFUM0s4IApLfX6LhT1Im0G0ON006FxJpRmpwvLNBplWxLqIY27wO6 + 0t1Pj+E4oc6zp6Edb7iZUvDwke3YGFLfAQAA//8DAL6JfU7aDgAA + headers: + CF-RAY: [4074effb20f36a79-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 14:27:50 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d631759db9fc03a671b430cf42e4d6dd81523024869; expires=Sat, + 06-Apr-19 14:27:49 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/cassettes/wizdom/test_query_file_name_series_imdb_id.yaml b/tests/cassettes/wizdom/test_query_file_name_series_imdb_id.yaml new file mode 100644 index 000000000..e444cf1dd --- /dev/null +++ b/tests/cassettes/wizdom/test_query_file_name_series_imdb_id.yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?season=0&episode=0&version=man.of.steel.2013.720p.bluray.x264-felony.mkv&imdb=tt0770828 + response: + body: + string: !!binary | + H4sIAAAAAAAAA6yX226bQBCG34WrVsqugOWYqy4sNW45FXBi1fIFjkm7EjaWHaeNqvbZK1gfxknr + GDsv8M3p/2d2R7+kx3K54vW8mJXStTQr5ri+x6uHsqywKisEm6q8wJNqvSye8E/V0NB9WdXzJ+lK + 4lPpWjJNU9WkK2l1Vy9L6dr+ffWMGBZzHN/j7ICYYCdN+wn2VUPDlLoopJ+8LOfuFqtqxAJY4zTs + osHyBaYuaXPFYbaeTJBTFdPSYQmEq6/B63/Aq3W66QJmeYZu+WcOmIZ1VsJLvhBISl2M8MOHSUUe + AFbXz+6DwLoEeTcxLN7oRtzUzZNiKuhNpipdT3ktJOH6LKEMzxYaiGKe3uJRE2YMM2+F8c7pR734 + th/1vr4HYNvoNjuHNcQW3jZEkSf8oa1BxwoKv8YRgfSzZCf8wfJMhMhyn+2ZmqxdOELqopn6DYpC + OV+/2yxRXjzlUBfmWQJmuzQbTyQrPtwiFUtX5K7DaqsePvKpz9oAKEpuYSuBqvRTeGIyDVDgijwo + VtC1xmvA/85m+MiZsFfAcw8mKZ+c5LsG+h4rstVgl9teQhjwv3a6WwWxGYnPxLgDr8flaEu2dasD + mTAB3+QpQvhFdY8yJ9srKllPKn63176hmrb5BkHiAYixxytEky3rzYsAAXSdaPJrAernATboj+uq + wg36YBYhxSZWRKhFccfntUpgv4yO424P6XbTY3fp/cgKVsJdYXck7hyNtKQqnuAqI7bVDXbQ65aZ + eW4epyZGoyhOaTpGo+Q7ned1ON51wVAt0i2M9jzKLINZm/IFWf9TGIpmEfONWrF7S+mmql7KLOb1 + cFavdyvOlm3z6Myy9aJcNu++/1yN1MABj7z9JWK8x3MawAcFaC856dRvFugNZ3hEXTJGXp72oMxe + Jb7UbNLyUFT3UvjUM0hH1D61xlBpGZRRHpSrDOpJ65reEt6LkAeBF/FBCBeZrXRjCsnvzmULHkTM + S934xkthA5SzGvDIGaJf4gyeIuuSsvGLsg3NINrJ0nmWXFuwA2TTXgP9EhxG2DnUoWV1VXY/yr00 + ogHOM+Ef1r8Z4pE3/zZGbPCFwsUMFoh6FC5eCboshw72mUvDjTX7CWbM/3NoHfUY9YjbW0G9dDsN + I5gzcJNyggSaXCPvFtMB47Ew6KdB89PzoJ3AzZOPQxve5s3kMwIf2YoMIeO/AAAA//8DAL6JfU7a + DgAA + headers: + CF-RAY: [4074eec000686b85-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 14:26:59 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=de3e309d4b884352b2aeef79e861d5fa51523024819; expires=Sat, + 06-Apr-19 14:26:59 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/cassettes/wizdom/test_query_file_name_series_imdb_id_season_episode.yaml b/tests/cassettes/wizdom/test_query_file_name_series_imdb_id_season_episode.yaml new file mode 100644 index 000000000..452370269 --- /dev/null +++ b/tests/cassettes/wizdom/test_query_file_name_series_imdb_id_season_episode.yaml @@ -0,0 +1,29 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Subliminal/2.0] + method: GET + uri: http://api.wizdom.xyz/search.id.php?imdb=tt0944947&version=Game.of.Thrones.S03E10.Mhysa.720p.WEB-DL.DD5.1.H.264-NTb.mkv&episode=10&season=3 + response: + body: + string: !!binary | + H4sIAAAAAAAAA6TR3U6DQBAF4HfZa5jMsMvCcke7tL0AmliCf/ECFVMuKA0kjcb47sYfYDWpRX2B + 75yZc/3MDmXbVc2uqEsWsGVRl9A8QLZtm13ZwQZ5RAjJ9qkrwHNwD+fRzNYxaO0CwQocKew0u2UW + q+5ZwEhKpVxmse6uaUsWqBfrNwmE/veIMJw7gJ9Jl4u0TxIOd8YcMTXn/YaVznJ4fAOjfB3nUW9y + T/ijyaeawv9i1hs9lESUhkhTxaMFlSvopLc+8t2ZPqv2H6yOkjDVxi/pry0vDpW2w8VysCQpYxic + WnHEeJzhMLNHXJ7mfuqWzH1zDu8/GGj7ClPee5IUkundvAIAAP//AwAXtKb5UAMAAA== + headers: + CF-RAY: [4074eff685da6a3d-LHR] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 06 Apr 2018 14:27:49 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d988b7a247654b6f9400ebdffba8317211523024868; expires=Sat, + 06-Apr-19 14:27:48 GMT; path=/; domain=.wizdom.xyz; HttpOnly'] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_wizdom.py b/tests/test_wizdom.py index f76390eae..75eb28673 100644 --- a/tests/test_wizdom.py +++ b/tests/test_wizdom.py @@ -20,6 +20,50 @@ def test_get_matches_no_match(episodes): assert matches == set() +@pytest.mark.integration +@vcr.use_cassette +def test_query_file_name_series_imdb_id_season_episode(episodes): + + languages = {Language('heb')} + expected_subtitles = {"166995", "4232", "3748", "40068", + "39541", "4231", "46192", "71362", + "40067", "61901"} + + with WizdomProvider() as provider: + subtitles = provider.query(os.path.basename(episodes['got_s03e10'].name), + episodes['got_s03e10'].series_imdb_id, + episodes['got_s03e10'].season, + episodes['got_s03e10'].episode) + + assert {subtitle.id for subtitle in subtitles} == expected_subtitles + assert {subtitle.language for subtitle in subtitles} == languages + + +@pytest.mark.integration +@vcr.use_cassette +def test_query_file_name_imdb_id(movies): + + languages = {Language('heb')} + expected_subtitles = {"77724", "24384", "24382", "24368", + "24355", "24386", "24372", "24396", + "24394", "24404", "24351", "24378", + "185106", "24402", "24366", "24400", + "24405", "95805", "62797", "134088", + "155340", "62796", "24359", "24398", + "66283", "24370", "114837", "75722", + "90978", "24380", "24390", "24363", + "24374", "134091", "24361", "24408", + "64634", "134085", "24388", "24357", + "24392", "24353", "24376", "24410"} + + with WizdomProvider() as provider: + subtitles = provider.query(os.path.basename( + movies['man_of_steel'].name), movies['man_of_steel'].imdb_id) + + assert {subtitle.id for subtitle in subtitles} == expected_subtitles + assert {subtitle.language for subtitle in subtitles} == languages + + @pytest.mark.integration @vcr.use_cassette def test_list_subtitle_episode(episodes): From 04dbfc838fee405742066b0336f177ff945ff616 Mon Sep 17 00:00:00 2001 From: Nadav Tenenbaum Date: Fri, 6 Apr 2018 17:40:41 +0300 Subject: [PATCH 6/6] added get matches tests --- tests/test_wizdom.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_wizdom.py b/tests/test_wizdom.py index 75eb28673..c7f8326e0 100644 --- a/tests/test_wizdom.py +++ b/tests/test_wizdom.py @@ -20,6 +20,24 @@ def test_get_matches_no_match(episodes): assert matches == set() +def test_get_matches_episode(episodes): + + subtitle = WizdomSubtitle("tt0944947", dict(versioname="Game.of.Thrones.S03E10.Mhysa.720p.WEB-DL.DD5.1.H.264-NTb", + id="166995", score=9)) + matches = subtitle.get_matches(episodes['got_s03e10']) + assert matches == {"title", "series", "year", "episode", "season", + "episode", "video_codec", "resolution", "release_group", "format"} + + +def test_get_matches_movie(movies): + + subtitle = WizdomSubtitle("tt0770828", dict(versioname="man.of.steel.2013.720p.bluray.x264-felony", + id="77724", score=9)) + matches = subtitle.get_matches(movies['man_of_steel']) + assert matches == {'title', 'year', 'video_codec', + 'resolution', 'format', 'release_group', 'imdb_id'} + + @pytest.mark.integration @vcr.use_cassette def test_query_file_name_series_imdb_id_season_episode(episodes):