Code source de henrri_connect.items.asynchro

"""
Sous-client pour les endpoints /v1/items.

Classes:
- ``henrri_connect.items.asynchro.AsyncItemsClient``
    Accès asynchrone aux endpoints articles.

Notes:
- Utiliser de préférence l'objet ``henrri_connect.AsyncHenrriClient`` pour acceder aux endpoints.
"""

from __future__ import annotations

from typing import TYPE_CHECKING, overload, Optional

from ..models import Item, PagedListResponse, ItemsQuery
from ..utils import clean

if TYPE_CHECKING:
    from ..connect import AsyncHenrriClient

ITEMS_ENDPOINT = "/v1/items"


[docs] class AsyncItemsClient: """ Accès asynchrone aux endpoints articles. Arguments - ``client`` : Objet ``henrri_connect.AsyncHenrriClient`` pour acceder aux endpoints. Methods - ``list_items`` : Liste les articles avec pagination et filtres optionnels. - ``add`` : Crée un nouvel article. - ``get`` : Récupère un article par son identifiant. - ``modify`` : Modifie un article par son identifiant. - ``delete`` : Supprime un article par son identifiant. - ``get_most_used`` : Récupère les articles les plus utilisés. - ``get_best_sales`` : Récupère les articles les plus vendus. - ``list_with_selected_fields`` : Liste les articles avec sélection de champs. """ def __init__(self, client: AsyncHenrriClient) -> None: self._c = client @overload async def list_items( self, *, request: ItemsQuery, with_selected_fields: bool = True, with_totals: bool = False, only_current_page: bool = True ) -> PagedListResponse[Item]:... @overload async def list_items( self, *, request: ItemsQuery, with_selected_fields: bool = False, with_totals: None = None, only_current_page: None = None, ) -> PagedListResponse[Item]:...
[docs] async def list_items( self, *, request: ItemsQuery, with_selected_fields: bool = True, with_totals: Optional[bool] = False, only_current_page: Optional[bool] = True ) -> PagedListResponse[Item]: """ Liste les articles avec pagination et filtres optionnels. Arguments - ``request`` (ItemsQuery) : Paramètres de recherche. - ``with_selected_fields`` (bool) : Si True, lance une requête de recherche avancée. - ``with_totals`` (bool) : Si True, renvoie les totaux. - ``only_current_page`` (bool) : Si True, renvoie uniquement les articles de la page actuelle. Returns - ``PagedListResponse[Item]`` : Liste paginée d'articles. """ params = clean(request.model_dump(by_alias=True)) if with_selected_fields: if with_totals and only_current_page: params["with_totals"] = with_totals params["only_current_page"] = only_current_page resp = await self._c.request( "GET", f"{ITEMS_ENDPOINT}/with-selected-fields", params=params ) else: raise ValueError( "with_totals and only_current_page must be True if with_selected_fields is True" ) else: resp = await self._c.request("GET", ITEMS_ENDPOINT, params=params) return PagedListResponse[Item].model_validate(resp.json())
[docs] async def add(self, item: Item) -> Item: """ Crée un nouvel article. Arguments - ``item`` (Item) : Article à créer. Returns - ``Item`` : Article créé. """ resp = await self._c.request( "POST", ITEMS_ENDPOINT, json=item.model_dump(by_alias=True, exclude_unset=True, exclude_none=True), ) return Item.model_validate(resp.json())
[docs] async def get(self, item_id: int) -> Item: """ Récupère un article par son identifiant. Arguments - ``item_id`` (int) : Identifiant de l'article. Returns - ``Item`` : Article trouvé. """ resp = await self._c.request("GET", f"{ITEMS_ENDPOINT}/{item_id}") return Item.model_validate(resp.json())
[docs] async def modify(self, item_id: int, item: Item) -> Item: """ Met à jour un article existant. Arguments - ``item_id`` (int) : Identifiant de l'article. - ``item`` (Item) : Article à mettre à jour. Returns - ``Item`` : Article mis à jour. """ resp = await self._c.request( "PUT", f"{ITEMS_ENDPOINT}/{item_id}", json=item.model_dump(by_alias=True, exclude_unset=True, exclude_none=True), ) return Item.model_validate(resp.json())
[docs] async def delete(self, item_id: int) -> None: """ Supprime un article. Arguments - ``item_id`` (int) : Identifiant de l'article à supprimer. Returns - ``None`` : Article supprimé. """ await self._c.request("DELETE", f"{ITEMS_ENDPOINT}/{item_id}")
[docs] async def get_most_used(self) -> PagedListResponse[Item]: """ Récupère les articles les plus utilisés. Arguments - None Returns - ``PagedListResponse[Item]`` : Liste paginée d'articles. """ resp = await self._c.request("GET", f"{ITEMS_ENDPOINT}/most-used") return PagedListResponse[Item].model_validate(resp.json())
[docs] async def get_best_sales(self, *, year: int) -> PagedListResponse[Item]: """ Récupère les articles les plus vendus. Arguments - ``year`` (int) : Année de recherche. Returns - ``PagedListResponse[Item]`` : Liste paginée d'articles. """ params = { "year": year } resp = await self._c.request("GET", f"{ITEMS_ENDPOINT}/best-sales", params=params) return PagedListResponse[Item].model_validate(resp.json())