Source code for autumn.aio.client
from __future__ import annotations
from typing import TYPE_CHECKING, Optional
from ..client import Client
from ..customers import Customers
from ..entities import Entities
from ..error import AutumnError
from ..features import Features
from ..products import Products
from .http import AsyncHTTPClient
try:
import aiohttp
except ImportError:
raise AutumnError(
"aiohttp is not installed. Please install it with `pip install aiohttp`",
"missing_dependency",
)
if TYPE_CHECKING:
from typing_extensions import Self
from .stubs import (
AttachParams,
CancelParams,
CheckoutParams,
CheckParams,
QueryParams,
TrackParams,
)
__all__ = ("AsyncClient",)
[docs]
class AsyncClient(Client):
"""
The ``async`` client class for interacting with the Autumn API.
This class is also exposed as ``autumn.Autumn``.
The ``AsyncClient`` automatically retries requests up to 5 times, exponentially backing off between attempts.
Note that session creation is lazy. This means that the ``AsyncClient`` will not attempt to create a session until the first request is made.
Parameters
----------
token: str
The API key to use for authentication.
base_url: Optional[str]
The base URL of the Autumn API. This is useful when you are self-hosting Autumn and need to point to your own instance.
max_retries: int
The maximum number of retries to attempt for failed requests.
session: Optional[:class:`~aiohttp.ClientSession`]
The session to use for requests. If not provided, a new session will be created **lazily**.
Attributes
----------
customers: :class:`~autumn.customers.Customers`
An interface to Autumn's customer API.
features: :class:`~autumn.features.Features`
An interface to Autumn's feature API.
products: :class:`~autumn.products.Products`
An interface to Autumn's product API.
entities: :class:`~autumn.entities.Entities`
An interface to Autumn's entities API.
"""
attach: AttachParams # type: ignore
check: CheckParams # type: ignore
track: TrackParams # type: ignore
checkout: CheckoutParams # type: ignore
query: QueryParams # type: ignore
cancel: CancelParams # type: ignore
def __init__(
self,
token: str,
*,
base_url: Optional[str] = None,
max_retries: int = 5,
session: Optional[aiohttp.ClientSession] = None,
) -> None:
from .. import BASE_URL, VERSION
_base_url = base_url or BASE_URL
_base_url = _base_url.rstrip("/")
attempts = max_retries + 1
self.http = AsyncHTTPClient(
_base_url,
VERSION,
token,
attempts=attempts,
session=session,
)
self.customers = Customers(self.http)
self.features = Features(self.http)
self.products = Products(self.http)
self.entities = Entities(self.http)
async def __aenter__(self) -> Self:
return self
async def __aexit__(self, _exc_type, _exc, _tb):
await self.close()
[docs]
async def close(self):
await self.http.close()