mirror of
https://github.com/morpheus65535/bazarr
synced 2025-02-22 22:10:42 +00:00
Gestdown provider: implement retries on 423 status codes
This commit is contained in:
parent
848836c5bb
commit
0e98880494
3 changed files with 38 additions and 3 deletions
|
@ -6,3 +6,4 @@ pytest-flakes
|
||||||
pytest-cov
|
pytest-cov
|
||||||
pytest-vcr
|
pytest-vcr
|
||||||
pytest-mock
|
pytest-mock
|
||||||
|
requests-mock
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
from requests import HTTPError
|
from requests import HTTPError
|
||||||
from requests import Session
|
from requests import Session
|
||||||
|
@ -37,6 +38,28 @@ class GestdownSubtitle(Subtitle):
|
||||||
return self._id
|
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):
|
class GestdownProvider(Provider):
|
||||||
provider_name = "gestdown"
|
provider_name = "gestdown"
|
||||||
|
|
||||||
|
@ -61,6 +84,7 @@ class GestdownProvider(Provider):
|
||||||
def terminate(self):
|
def terminate(self):
|
||||||
self._session.close()
|
self._session.close()
|
||||||
|
|
||||||
|
@_retry_on_423
|
||||||
def _subtitles_search(self, video, language: Language):
|
def _subtitles_search(self, video, language: Language):
|
||||||
json_data = {
|
json_data = {
|
||||||
"search": f"{video.series} S{video.season:02}E{video.episode:02}",
|
"search": f"{video.series} S{video.season:02}E{video.episode:02}",
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import pytest
|
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 GestdownProvider
|
||||||
from subliminal_patch.providers.gestdown import GestdownSubtitle
|
from subliminal_patch.providers.gestdown import GestdownSubtitle
|
||||||
from subzero.language import Language
|
from subzero.language import Language
|
||||||
|
|
||||||
from subliminal_patch.language import PatchedAddic7edConverter
|
|
||||||
|
|
||||||
|
|
||||||
def test_language_list_is_convertible():
|
def test_language_list_is_convertible():
|
||||||
converter = PatchedAddic7edConverter()
|
converter = PatchedAddic7edConverter()
|
||||||
|
@ -75,3 +74,14 @@ def test_subtitle_download(subtitle):
|
||||||
provider.download_subtitle(subtitle)
|
provider.download_subtitle(subtitle)
|
||||||
assert subtitle.content is not None
|
assert subtitle.content is not None
|
||||||
assert subtitle.is_valid()
|
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…
Reference in a new issue