From bb842b92af4049e4ac1d342aaf4a960b8b0bba09 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Thu, 27 May 2021 08:49:52 -0400 Subject: [PATCH] Improved Opensubtitles.com providers --- .../providers/opensubtitlescom.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libs/subliminal_patch/providers/opensubtitlescom.py b/libs/subliminal_patch/providers/opensubtitlescom.py index 1af72784f..69e874ec4 100644 --- a/libs/subliminal_patch/providers/opensubtitlescom.py +++ b/libs/subliminal_patch/providers/opensubtitlescom.py @@ -19,6 +19,7 @@ from subliminal.subtitle import fix_line_ending, SUBTITLE_EXTENSIONS from subliminal_patch.providers import Provider from subliminal_patch.utils import fix_inconsistent_naming from subliminal.cache import region +from dogpile.cache.api import NO_VALUE from guessit import guessit logger = logging.getLogger(__name__) @@ -121,7 +122,7 @@ class OpenSubtitlesComSubtitle(Subtitle): class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): """OpenSubtitlesCom Provider""" - server_url = 'https://www.opensubtitles.com/api/v1/' + server_url = 'https://api.opensubtitles.com/api/v1/' languages = {Language.fromopensubtitles(l) for l in language_converters['szopensubtitles'].codes} languages.update(set(Language.rebuild(l, forced=True) for l in languages)) @@ -144,8 +145,9 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): self.use_hash = use_hash def initialize(self): - self.login() self.token = region.get("oscom_token") + if self.token is NO_VALUE: + self.login() def terminate(self): self.session.close() @@ -172,6 +174,8 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): raise AuthenticationError('Login failed: {}'.format(r.reason)) elif r.status_code == 429: raise TooManyRequests() + elif r.status_code == 503: + raise ProviderError(r.reason) else: raise ProviderError('Bad status code: {}'.format(r.status_code)) finally: @@ -205,8 +209,12 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): if results.status_code == 429: raise TooManyRequests() + elif results.status_code == 503: + raise ProviderError(results.reason) elif results.status_code == 429: raise TooManyRequests() + elif results.status_code == 503: + raise ProviderError(results.reason) # deserialize results try: @@ -267,6 +275,9 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): if res.status_code == 429: raise TooManyRequests() + elif res.status_code == 503: + raise ProviderError(res.reason) + subtitles = [] try: @@ -328,6 +339,8 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): raise TooManyRequests() elif res.status_code == 406: raise DownloadLimitExceeded("Daily download limit reached") + elif res.status_code == 503: + raise ProviderError(res.reason) else: try: subtitle.download_link = res.json()['link'] @@ -340,6 +353,8 @@ class OpenSubtitlesComProvider(ProviderRetryMixin, Provider): raise TooManyRequests() elif res.status_code == 406: raise DownloadLimitExceeded("Daily download limit reached") + elif res.status_code == 503: + raise ProviderError(res.reason) subtitle_content = r.content