Gestdown provider: implement retries on 423 status codes

pull/1853/head
vitiko98 2 years ago
parent 848836c5bb
commit 0e98880494

@ -6,3 +6,4 @@ pytest-flakes
pytest-cov
pytest-vcr
pytest-mock
requests-mock

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import logging
import time
from requests import HTTPError
from requests import Session
@ -37,6 +38,28 @@ class GestdownSubtitle(Subtitle):
return self._id
def _retry_on_423(method):
def retry(self, *args, **kwargs):
retries = 0
while 5 > retries:
try:
yield from method(self, *args, **kwargs)
except HTTPError as error:
if error.response.status_code != 423:
raise
retries += 1
logger.debug("423 returned. Retrying in 30 seconds")
time.sleep(30)
else:
break
logger.debug("Retries limit exceeded. Ignoring query")
return retry
class GestdownProvider(Provider):
provider_name = "gestdown"
@ -61,6 +84,7 @@ 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}",

@ -1,11 +1,10 @@
import pytest
from subliminal_patch.language import PatchedAddic7edConverter
from subliminal_patch.providers.gestdown import _BASE_URL
from subliminal_patch.providers.gestdown import GestdownProvider
from subliminal_patch.providers.gestdown import GestdownSubtitle
from subzero.language import Language
from subliminal_patch.language import PatchedAddic7edConverter
def test_language_list_is_convertible():
converter = PatchedAddic7edConverter()
@ -75,3 +74,14 @@ def test_subtitle_download(subtitle):
provider.download_subtitle(subtitle)
assert subtitle.content is not None
assert subtitle.is_valid()
def test_subtitles_search_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 list(gen)

Loading…
Cancel
Save