refactor(api-client): allow custom retry strategy

This commit is contained in:
jo 2023-02-26 13:17:36 +01:00 committed by Kyle Robbertze
parent e992d7147e
commit ad00272168
2 changed files with 28 additions and 12 deletions

View File

@ -26,20 +26,26 @@ class TimeoutHTTPAdapter(HTTPAdapter):
return super().send(request, *args, **kwargs)
class Session(BaseSession):
base_url: Optional[str]
def __init__(self, base_url: Optional[str] = None):
super().__init__()
self.base_url = base_url
retry_strategy = Retry(
total=5,
def default_retry(max_retries: int = 5):
return Retry(
total=max_retries,
backoff_factor=2,
status_forcelist=[413, 429, 500, 502, 503, 504],
)
adapter = TimeoutHTTPAdapter(max_retries=retry_strategy)
class Session(BaseSession):
base_url: Optional[str]
def __init__(
self,
base_url: Optional[str] = None,
retry: Optional[Retry] = None,
):
super().__init__()
self.base_url = base_url
adapter = TimeoutHTTPAdapter(max_retries=retry)
self.mount("http://", adapter)
self.mount("https://", adapter)
@ -61,9 +67,16 @@ class AbstractApiClient:
session: Session
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.session = Session(base_url=base_url)
self.session = Session(
base_url=base_url,
retry=retry,
)
def _request(
self,

View File

@ -1,11 +1,14 @@
from ._client import AbstractApiClient, Response
from ._client import AbstractApiClient, Response, default_retry
class ApiClient(AbstractApiClient):
VERSION = "2.0"
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}"})
def get_info(self, **kwargs) -> Response: