Code source de henrri_connect.document_lines.asynchro
"""
Sous-client pour les endpoints /v1/documents/{documentId}/lines.
Classes:
- ``henrri_connect.document_lines.asynchro.AsyncDocumentLinesClient``
Accès asynchrone aux endpoints lignes de documents.
Notes:
- Utiliser de préférence l'objet ``henrri_connect.AsyncHenrriClient`` pour acceder
aux endpoints.
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Optional
from ..models import DocumentLine, ListResponse, DocumentLineListQueryParameters
if TYPE_CHECKING:
from ..connect import AsyncHenrriClient
DOCUMENT_ENDPOINT = "/v1/documents"
[docs]
class AsyncDocumentLinesClient:
"""
Accès asynchrone aux lignes de document.
Arguments
- ``client`` : Objet ``henrri_connect.AsyncHenrriClient``.
Methods
- ``list_document_lines`` : Liste les lignes d'un document.
- ``add`` : Ajoute une ligne à un document.
- ``get`` : Récupère une ligne de document par son identifiant.
- ``modify`` : Modifie une ligne de document par son identifiant.
- ``delete`` : Supprime une ligne de document par son identifiant.
- ``move`` : Déplace une ligne vers une position donnée.
"""
def __init__(self, client: AsyncHenrriClient) -> None:
self._c = client
[docs]
async def list_document_lines(
self,
document_id: int,
query_params: Optional[DocumentLineListQueryParameters] = None,
) -> ListResponse[DocumentLine]:
"""
Liste les lignes d'un document.
Arguments
- ``document_id`` (int) : Identifiant du document (min 1 et max 2 147 483 647).
- ``query_params`` (DocumentLineListQueryParameters, optional) : Paramètres de requête.
Returns
- ``ListResponse[DocumentLine]`` : Liste de lignes de document.
"""
if query_params:
resp = await self._c.request(
"GET",
f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
params=query_params.model_dump(
by_alias=True,
exclude_unset=True,
exclude_none=True
),
)
else:
resp = await self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines")
return ListResponse[DocumentLine].model_validate(resp.json())
[docs]
async def add(self, document_id: int, line: DocumentLine) -> DocumentLine:
"""
Ajoute une ligne à un document.
Arguments
- ``document_id`` : Identifiant du document.
- ``line`` : Ligne de document.
Returns
- ``DocumentLine`` : Ligne de document ajoutée.
"""
resp = await self._c.request(
"POST",
f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
)
return DocumentLine.model_validate(resp.json())
[docs]
async def get(self, document_id: int, line_id: int) -> DocumentLine:
"""
Récupère une ligne de document par son identifiant.
Arguments
- ``document_id`` : Identifiant du document.
- ``line_id`` : Identifiant de la ligne de document.
Returns
- ``DocumentLine`` : Ligne de document.
"""
resp = await self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
return DocumentLine.model_validate(resp.json())
[docs]
async def modify(self, document_id: int, line_id: int, line: DocumentLine) -> DocumentLine:
"""
Met à jour une ligne de document.
Arguments
- ``document_id`` : Identifiant du document.
- ``line_id`` : Identifiant de la ligne de document.
- ``line`` : Ligne de document.
Returns
- ``DocumentLine`` : Ligne de document modifiée.
"""
resp = await self._c.request(
"PUT",
f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}",
json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
)
return DocumentLine.model_validate(resp.json())
[docs]
async def delete(self, document_id: int, line_id: int) -> None:
"""
Supprime une ligne de document.
Arguments
- ``document_id`` : Identifiant du document.
- ``line_id`` : Identifiant de la ligne de document.
Returns
- ``None``
"""
await self._c.request("DELETE", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
[docs]
async def move(self, document_id: int, line_id: int, to: int) -> None:
"""
Déplace une ligne vers une position donnée.
Arguments
- ``document_id`` : Identifiant du document.
- ``line_id`` : Identifiant de la ligne de document.
- ``to`` : Position de destination.
Returns
- ``None``
"""
await self._c.request(
"POST",
f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}/move",
json={"to": to},
)