Source code for autumn.entities

from __future__ import annotations

from typing import (
    TYPE_CHECKING,
    Any,
    Coroutine,
    Generic,
    List,
    Literal,
    Optional,
    TypeVar,
    Union,
    overload,
)

from .models.entities import Entity
from .models.meta import Empty
from .models.response import TransferProductResponse
from .utils import _build_payload

if TYPE_CHECKING:
    from .aio.http import AsyncHTTPClient
    from .http import HTTPClient

T_HttpClient = TypeVar("T_HttpClient", "AsyncHTTPClient", "HTTPClient")

__all__ = ("Entities",)


[docs] class Entities(Generic[T_HttpClient]): """An interface to Autumn's entities API. .. warning:: This class is not intended for public use. It is used internally by the :class:`autumn.Client` class. Do not initialize this class directly. """ def __init__(self, http: T_HttpClient): self._http = http @overload def get( self: "Entities[HTTPClient]", customer_id: str, entity_id: str, expand: Optional[List[Literal["invoices"]]] = None, ) -> Entity: ... @overload def get( self: "Entities[AsyncHTTPClient]", customer_id: str, entity_id: str, expand: Optional[List[Literal["invoices"]]] = None, ) -> Coroutine[Any, Any, Entity]: ...
[docs] def get( self, customer_id: str, entity_id: str, expand: Optional[List[Literal["invoices"]]] = None, ) -> Union[Entity, Coroutine[Any, Any, Entity]]: """Get an entity by their ID. |maybecoro| Parameters ---------- customer_id: str The ID of the customer to get. entity_id: str The ID of the entity to get. expand: Optional[List[Literal["invoices"]]] Additional fields to expand in the response. Returns ------- :class:`~autumn.models.entities.Entity` The entity. """ params = {} if expand is not None: params["expand"] = expand return self._http.request( "GET", f"/customers/{customer_id}/entities/{entity_id}", Entity, params=params, )
@overload def create( self: "Entities[HTTPClient]", customer_id: str, id: str, feature_id: str, name: str, ) -> Entity: ... @overload def create( self: "Entities[AsyncHTTPClient]", customer_id: str, id: str, feature_id: str, name: str, ) -> Coroutine[Any, Any, Entity]: ...
[docs] def create( self, customer_id: str, id: str, feature_id: str, name: str ) -> Union[Entity, Coroutine[Any, Any, Entity]]: """Create an entity for a customer. |maybecoro| Parameters ---------- customer_id: str The ID of the customer to create the entity for. id: str The ID of the entity to create. feature_id: str The ID of the feature to create the entity for. name: str The name of the entity to create. Returns ------- :class:`~autumn.models.entities.Entity` The created entity. """ payload = _build_payload( locals(), Entities.create, ignore={"customer_id"} ) return self._http.request( "POST", f"/customers/{customer_id}/entities", Entity, json=payload )
@overload def delete( self: "Entities[HTTPClient]", customer_id: str, entity_id: str, ) -> Empty: ... @overload def delete( self: "Entities[AsyncHTTPClient]", customer_id: str, entity_id: str, ) -> Coroutine[Any, Any, Empty]: ...
[docs] def delete( self, customer_id: str, entity_id: str ) -> Union[Empty, Coroutine[Any, Any, Empty]]: """Delete an entity for a customer. |maybecoro| Parameters ---------- customer_id: str The ID of the customer to delete the entity for. entity_id: str The ID of the entity to delete. Returns ------- :class:`~autumn.models.meta.Empty` This is a placeholder type. Treat it as :class:`None`. """ return self._http.request( "DELETE", f"/customers/{customer_id}/entities/{entity_id}", Empty )
@overload def transfer( self: "Entities[HTTPClient]", customer_id: str, to_entity_id: str, product_id: str, from_entity_id: Optional[str] = None, ) -> TransferProductResponse: ... @overload def transfer( self: "Entities[AsyncHTTPClient]", customer_id: str, to_entity_id: str, product_id: str, from_entity_id: Optional[str] = None, ) -> Coroutine[Any, Any, TransferProductResponse]: ...
[docs] def transfer( self, customer_id: str, to_entity_id: str, product_id: str, from_entity_id: Optional[str] = None, ) -> Union[ TransferProductResponse, Coroutine[Any, Any, TransferProductResponse] ]: """Transfer a product from one entity to another. |maybecoro| Parameters ---------- customer_id: str The ID of the customer who owns the entities. to_entity_id: str The ID of the entity to transfer the product to. product_id: str The ID of the product to transfer. from_entity_id: Optional[str] The ID of the entity to transfer the product from. If not provided, transfers from the customer's general balance. Returns ------- :class:`~autumn.models.entities.TransferProductResult` The result of the transfer operation. """ payload = _build_payload( locals(), Entities.transfer, ignore={"customer_id"} ) return self._http.request( "POST", f"/customers/{customer_id}/transfer", TransferProductResponse, json=payload, )