From 5a13046d580ffa42213aab53ac43abec1b41a8d2 Mon Sep 17 00:00:00 2001 From: vitiko98 Date: Wed, 25 May 2022 20:44:47 -0400 Subject: [PATCH] Gestdown provider: improve http error handling 423 code retries were blocking every language query for too much time. The amount of retries was reduced from 5 to 3 --- libs/subliminal_patch/providers/gestdown.py | 9 ++++----- tests/subliminal_patch/test_gestdown.py | 7 +++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/libs/subliminal_patch/providers/gestdown.py b/libs/subliminal_patch/providers/gestdown.py index 1a84a9459..6474aad55 100644 --- a/libs/subliminal_patch/providers/gestdown.py +++ b/libs/subliminal_patch/providers/gestdown.py @@ -41,9 +41,9 @@ class GestdownSubtitle(Subtitle): def _retry_on_423(method): def retry(self, *args, **kwargs): retries = 0 - while 5 > retries: + while 3 > retries: try: - yield from method(self, *args, **kwargs) + return method(self, *args, **kwargs) except HTTPError as error: if error.response.status_code != 423: raise @@ -52,10 +52,9 @@ def _retry_on_423(method): logger.debug("423 returned. Retrying in 30 seconds") time.sleep(30) - else: - break logger.debug("Retries limit exceeded. Ignoring query") + return [] return retry @@ -84,7 +83,6 @@ class GestdownProvider(Provider): def terminate(self): self._session.close() - @_retry_on_423 def _subtitles_search(self, video, language: Language): json_data = { "search": f"{video.series} S{video.season:02}E{video.episode:02}", @@ -111,6 +109,7 @@ class GestdownProvider(Provider): logger.debug("Found subtitle: %s", sub) yield sub + @_retry_on_423 def list_subtitles(self, video, languages): subtitles = [] for language in languages: diff --git a/tests/subliminal_patch/test_gestdown.py b/tests/subliminal_patch/test_gestdown.py index 59310774f..100ca8689 100644 --- a/tests/subliminal_patch/test_gestdown.py +++ b/tests/subliminal_patch/test_gestdown.py @@ -76,12 +76,11 @@ def test_subtitle_download(subtitle): assert subtitle.is_valid() -def test_subtitles_search_423(episodes, requests_mock, mocker): +def test_list_subtitles_423(episodes, requests_mock, mocker): mocker.patch("time.sleep") requests_mock.post(f"{_BASE_URL}/subtitles/search", status_code=423) with GestdownProvider() as provider: - gen = provider._subtitles_search( - episodes["breaking_bad_s01e01"], Language.fromietf("en") + assert not provider.list_subtitles( + episodes["breaking_bad_s01e01"], {Language.fromietf("en")} ) - assert not list(gen)