2019-11-30 10:11:00 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
|
|
|
|
|
|
from babelfish import language_converters
|
|
|
|
from subzero.language import Language
|
|
|
|
import pytest
|
|
|
|
from vcr import VCR
|
|
|
|
from urlparse import urlparse, parse_qs
|
|
|
|
from urllib import urlencode
|
|
|
|
|
|
|
|
from subliminal_patch.providers.assrt import AssrtSubtitle, AssrtProvider, \
|
|
|
|
language_contains, search_language_in_list, supported_languages
|
|
|
|
|
|
|
|
def remove_auth_token(request):
|
|
|
|
parsed_uri = urlparse(request.uri)
|
|
|
|
parsed_query = parse_qs(parsed_uri.query)
|
|
|
|
if 'token' in parsed_query:
|
|
|
|
parsed_query['token'] = 'SECRET'
|
|
|
|
parsed_uri = parsed_uri._replace(query=urlencode(parsed_query))
|
|
|
|
request.uri = parsed_uri.geturl()
|
|
|
|
return request
|
|
|
|
|
|
|
|
vcr = VCR(path_transformer=lambda path: path + '.yaml',
|
|
|
|
before_record_request=remove_auth_token,
|
|
|
|
record_mode=os.environ.get('VCR_RECORD_MODE', 'once'),
|
|
|
|
match_on=['method', 'scheme', 'host', 'port', 'path', 'body'],
|
|
|
|
cassette_library_dir=os.path.realpath(os.path.join('cassettes', 'assrt')))
|
|
|
|
|
|
|
|
TOKEN=os.environ.get('ASSRT_TOKEN', 'NO_TOKEN_PROVIDED')
|
|
|
|
|
|
|
|
def test_supported_languages():
|
|
|
|
assert set(supported_languages) == set([('zho', None, None),
|
|
|
|
('eng', None, None),
|
|
|
|
('zho', None, 'Hans'),
|
|
|
|
('zho', None, 'Hant')])
|
|
|
|
|
|
|
|
def test_language_contains():
|
|
|
|
assert language_contains(Language('zho'), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', 'TW', None), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', 'CN', None), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', None, 'Hant'), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', None, 'Hans'), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', 'TW', 'Hant'), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', 'CN', 'Hans'), Language('zho'))
|
|
|
|
assert language_contains(Language('zho', None, 'Hant'), Language('zho', None, 'Hant'))
|
|
|
|
assert language_contains(Language('zho', None, 'Hans'), Language('zho', None, 'Hans'))
|
|
|
|
|
|
|
|
|
|
|
|
def test_search_language_in_list():
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho', None, 'Hant')])
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hans')])
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho')])
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho')])
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hant'), [Language('eng'), Language('zho')])
|
|
|
|
assert not search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant')])
|
|
|
|
assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant'), Language('zho')])
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_matches_exact_movie_name(movies):
|
|
|
|
subtitle = AssrtSubtitle(Language('zho'), 253629,
|
|
|
|
'man.of.steel.2013.720p.bluray.x264-felony.mkv',
|
|
|
|
None, None)
|
|
|
|
matches = subtitle.get_matches(movies['man_of_steel'])
|
|
|
|
assert matches == {'title', 'format', 'release_group', 'year',
|
|
|
|
'video_codec', 'resolution'}
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_matches_movie_name(movies):
|
|
|
|
subtitle = AssrtSubtitle(Language('zho'), 618185,
|
|
|
|
'Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT',
|
|
|
|
None, None)
|
|
|
|
matches = subtitle.get_matches(movies['man_of_steel'])
|
|
|
|
assert matches == {'title', 'format', 'year', 'video_codec', 'resolution'}
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.converter
|
|
|
|
def test_converter_convert_alpha3():
|
2021-02-12 19:15:19 +00:00
|
|
|
assert language_converters['assrt'].convert('zho', None, 'Hans') == 'chi'
|
|
|
|
assert language_converters['assrt'].convert('zho', None, 'Hant') == 'zht'
|
2019-11-30 10:11:00 +00:00
|
|
|
assert language_converters['assrt'].convert('eng') == 'eng'
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.converter
|
|
|
|
def test_converter_reverse():
|
2021-02-12 19:15:19 +00:00
|
|
|
assert language_converters['assrt'].reverse('chi') == ('zho', None, 'Hans')
|
|
|
|
assert language_converters['assrt'].reverse('zht') == ('zho', None, 'Hant')
|
2019-11-30 10:11:00 +00:00
|
|
|
assert language_converters['assrt'].reverse(u'簡體') == ('zho', None, 'Hans')
|
|
|
|
assert language_converters['assrt'].reverse(u'繁體') == ('zho', None, 'Hant')
|
|
|
|
assert language_converters['assrt'].reverse(u'简体') == ('zho', None, 'Hans')
|
|
|
|
assert language_converters['assrt'].reverse(u'繁体') == ('zho', None, 'Hant')
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_query_movie_zh_Hans(movies):
|
|
|
|
languages = [Language('zho', None, 'Hant')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.query(languages, video)
|
|
|
|
assert len(subtitles) == 8
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_query_movie_zh_Hant(movies):
|
|
|
|
languages = [Language('zho', None, 'Hans')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.query(languages, video)
|
|
|
|
assert len(subtitles) == 8
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_query_movie_zh(movies):
|
|
|
|
languages = [Language('zho')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.query(languages, video)
|
|
|
|
assert len(subtitles) == 16
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_query_episode(episodes):
|
|
|
|
video = episodes['bbt_s07e05']
|
|
|
|
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.query(languages, video)
|
|
|
|
assert len(subtitles) == 11
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_query_list_subtitles(movies):
|
|
|
|
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.list_subtitles(video, languages)
|
|
|
|
assert len(subtitles) == 16
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_download_subtitle(movies):
|
|
|
|
languages = [Language('zho', None, 'Hant')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.list_subtitles(video, languages)
|
|
|
|
provider.download_subtitle(subtitles[0])
|
|
|
|
assert subtitles[0].content is not None
|
|
|
|
assert subtitles[0].language == Language('zho', None, 'Hant')
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_download_subtitle_zh(movies):
|
|
|
|
languages = [Language('zho')]
|
|
|
|
video = movies['man_of_steel']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.list_subtitles(video, languages)
|
|
|
|
provider.download_subtitle(subtitles[0])
|
|
|
|
assert subtitles[0].content is not None
|
|
|
|
assert subtitles[0].language == Language('zho')
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.integration
|
|
|
|
@vcr.use_cassette
|
|
|
|
def test_download_episode_subtitle(episodes):
|
|
|
|
languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')]
|
|
|
|
video = episodes['bbt_s07e05']
|
|
|
|
with AssrtProvider(TOKEN) as provider:
|
|
|
|
subtitles = provider.list_subtitles(video, languages)
|
|
|
|
provider.download_subtitle(subtitles[0])
|
|
|
|
assert subtitles[0].content is not None
|
|
|
|
assert subtitles[0].language == Language('zho', None, 'Hans')
|