diff options
author | Vitiko <[email protected]> | 2023-02-15 20:51:55 -0400 |
---|---|---|
committer | Vitiko <[email protected]> | 2023-02-15 20:51:55 -0400 |
commit | 62b5bd84b909e8e784cded76899ec653bbc3c071 (patch) | |
tree | 4f5ea65aae926768b5a36be2726a3858659af892 | |
parent | f6c01464020f70e2736f8a2d9ad185515e3d87db (diff) | |
download | bazarr-62b5bd84b909e8e784cded76899ec653bbc3c071.tar.gz bazarr-62b5bd84b909e8e784cded76899ec653bbc3c071.zip |
Supersubtitles provider: update matcher and downloaderv1.1.5-beta.16
-rw-r--r-- | libs/subliminal_patch/providers/supersubtitles.py | 61 | ||||
-rw-r--r-- | tests/subliminal_patch/test_supersubtitles.py | 4 |
2 files changed, 29 insertions, 36 deletions
diff --git a/libs/subliminal_patch/providers/supersubtitles.py b/libs/subliminal_patch/providers/supersubtitles.py index cfc6bff00..7f779fedb 100644 --- a/libs/subliminal_patch/providers/supersubtitles.py +++ b/libs/subliminal_patch/providers/supersubtitles.py @@ -1,32 +1,34 @@ # coding=utf-8 -import io import logging +from random import randint import re import time +import urllib.parse from babelfish import language_converters -from subzero.language import Language +from bs4.element import NavigableString +from bs4.element import Tag +from guessit import guessit from requests import Session from requests.exceptions import JSONDecodeError -import urllib.parse -from random import randint - -from subliminal.subtitle import fix_line_ending -from subliminal_patch.providers import Provider -from subliminal_patch.providers.mixins import ProviderSubtitleArchiveMixin from subliminal.providers import ParserBeautifulSoup -from bs4.element import Tag, NavigableString from subliminal.score import get_equivalent_release_groups -from subliminal_patch.subtitle import Subtitle, guess_matches +from subliminal.utils import sanitize +from subliminal.utils import sanitize_release_group +from subliminal.video import Episode +from subliminal.video import Movie from subliminal_patch.exceptions import APIThrottled -from subliminal.utils import sanitize, sanitize_release_group -from subliminal.video import Episode, Movie -from zipfile import ZipFile, is_zipfile -from rarfile import RarFile, is_rarfile -from subliminal_patch.utils import sanitize, fix_inconsistent_naming -from guessit import guessit -from .utils import FIRST_THOUSAND_OR_SO_USER_AGENTS as AGENT_LIST +from subliminal_patch.providers import Provider +from subliminal_patch.providers.mixins import ProviderSubtitleArchiveMixin +from subliminal_patch.subtitle import Subtitle +from subliminal_patch.utils import fix_inconsistent_naming +from subliminal_patch.utils import sanitize +from subzero.language import Language +from .utils import FIRST_THOUSAND_OR_SO_USER_AGENTS as AGENT_LIST +from .utils import get_archive_from_bytes +from .utils import get_subtitle_from_archive +from .utils import update_matches logger = logging.getLogger(__name__) @@ -78,7 +80,7 @@ class SuperSubtitlesSubtitle(Subtitle): self.season = season self.episode = episode self.version = version - self.releases = releases + self.releases = releases or [] self.year = year self.uploader = uploader if year: @@ -91,7 +93,7 @@ class SuperSubtitlesSubtitle(Subtitle): self.asked_for_episode = asked_for_episode self.imdb_id = imdb_id self.is_pack = True - self.matches = None + self.matches = set() def numeric_id(self): return self.subtitle_id @@ -109,8 +111,8 @@ class SuperSubtitlesSubtitle(Subtitle): return str(self.subtitle_id) def get_matches(self, video): - type_ = "movie" if isinstance(video, Movie) else "episode" - matches = guess_matches(video, guessit(self.release_info, {"type": type_})) + matches = set() + update_matches(matches, video, self.releases) # episode if isinstance(video, Episode): @@ -543,21 +545,12 @@ class SuperSubtitlesProvider(Provider, ProviderSubtitleArchiveMixin): return subtitles def download_subtitle(self, subtitle): - - # download as a zip - logger.info('Downloading subtitle %r', subtitle.subtitle_id) r = self.session.get(subtitle.page_link, timeout=10) r.raise_for_status() - archive_stream = io.BytesIO(r.content) - archive = None + archive = get_archive_from_bytes(r.content) - if is_rarfile(archive_stream): - archive = RarFile(archive_stream) - elif is_zipfile(archive_stream): - archive = ZipFile(archive_stream) - else: - subtitle.content = fix_line_ending(r.content) + if archive is None: + raise APIThrottled(f"Invalid archive from {subtitle.page_link}") - if archive is not None: - subtitle.content = self.get_subtitle_from_archive(subtitle, archive) + subtitle.content = get_subtitle_from_archive(archive, episode=subtitle.episode or None) diff --git a/tests/subliminal_patch/test_supersubtitles.py b/tests/subliminal_patch/test_supersubtitles.py index 6111cabc0..3794a04ca 100644 --- a/tests/subliminal_patch/test_supersubtitles.py +++ b/tests/subliminal_patch/test_supersubtitles.py @@ -44,7 +44,7 @@ def test_list_episode_subtitles(episode): def test_download_episode_subtitle(episode): subtitle = SuperSubtitlesSubtitle( Language.fromalpha2("en"), - "https://www.feliratok.info/index.php?action=letolt&felirat=1643361676", + "https://www.feliratok.eu/index.php?action=letolt&felirat=1643361676", 1643361676, "All of us are dead", 1, @@ -82,7 +82,7 @@ def test_download_movie_subtitle(movies): subtitle = SuperSubtitlesSubtitle( Language.fromalpha2("en"), - "https://www.feliratok.info/index.php?action=letolt&felirat=1634579718", + "https://www.feliratok.eu/index.php?action=letolt&felirat=1634579718", 1634579718, "Dune", 0, |