refactor(api-client): allow custom retry strategy
This commit is contained in:
parent
e992d7147e
commit
ad00272168
|
@ -26,20 +26,26 @@ class TimeoutHTTPAdapter(HTTPAdapter):
|
||||||
return super().send(request, *args, **kwargs)
|
return super().send(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def default_retry(max_retries: int = 5):
|
||||||
|
return Retry(
|
||||||
|
total=max_retries,
|
||||||
|
backoff_factor=2,
|
||||||
|
status_forcelist=[413, 429, 500, 502, 503, 504],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Session(BaseSession):
|
class Session(BaseSession):
|
||||||
base_url: Optional[str]
|
base_url: Optional[str]
|
||||||
|
|
||||||
def __init__(self, base_url: Optional[str] = None):
|
def __init__(
|
||||||
|
self,
|
||||||
|
base_url: Optional[str] = None,
|
||||||
|
retry: Optional[Retry] = None,
|
||||||
|
):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
|
|
||||||
retry_strategy = Retry(
|
adapter = TimeoutHTTPAdapter(max_retries=retry)
|
||||||
total=5,
|
|
||||||
backoff_factor=2,
|
|
||||||
status_forcelist=[413, 429, 500, 502, 503, 504],
|
|
||||||
)
|
|
||||||
|
|
||||||
adapter = TimeoutHTTPAdapter(max_retries=retry_strategy)
|
|
||||||
|
|
||||||
self.mount("http://", adapter)
|
self.mount("http://", adapter)
|
||||||
self.mount("https://", adapter)
|
self.mount("https://", adapter)
|
||||||
|
@ -61,9 +67,16 @@ class AbstractApiClient:
|
||||||
session: Session
|
session: Session
|
||||||
base_url: str
|
base_url: str
|
||||||
|
|
||||||
def __init__(self, base_url: str):
|
def __init__(
|
||||||
|
self,
|
||||||
|
base_url: str,
|
||||||
|
retry: Optional[Retry] = None,
|
||||||
|
):
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
self.session = Session(base_url=base_url)
|
self.session = Session(
|
||||||
|
base_url=base_url,
|
||||||
|
retry=retry,
|
||||||
|
)
|
||||||
|
|
||||||
def _request(
|
def _request(
|
||||||
self,
|
self,
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
from ._client import AbstractApiClient, Response
|
from ._client import AbstractApiClient, Response, default_retry
|
||||||
|
|
||||||
|
|
||||||
class ApiClient(AbstractApiClient):
|
class ApiClient(AbstractApiClient):
|
||||||
VERSION = "2.0"
|
VERSION = "2.0"
|
||||||
|
|
||||||
def __init__(self, base_url: str, api_key: str):
|
def __init__(self, base_url: str, api_key: str):
|
||||||
super().__init__(base_url=base_url)
|
super().__init__(
|
||||||
|
base_url=base_url,
|
||||||
|
retry=default_retry(),
|
||||||
|
)
|
||||||
self.session.headers.update({"Authorization": f"Api-Key {api_key}"})
|
self.session.headers.update({"Authorization": f"Api-Key {api_key}"})
|
||||||
|
|
||||||
def get_info(self, **kwargs) -> Response:
|
def get_info(self, **kwargs) -> Response:
|
||||||
|
|
Loading…
Reference in New Issue