mirror of
https://github.com/morpheus65535/bazarr
synced 2025-02-22 05:51:10 +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-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…
Reference in a new issue