Coverage for src/henrri_connect/document_lines/asynchro.py: 76%
25 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-09 19:37 +0200
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-09 19:37 +0200
1"""
2Sous-client pour les endpoints /v1/documents/{documentId}/lines.
4Classes:
5- ``henrri_connect.document_lines.asynchro.AsyncDocumentLinesClient``
6 Accès asynchrone aux endpoints lignes de documents.
8Notes:
9- Utiliser de préférence l'objet ``henrri_connect.AsyncHenrriClient`` pour acceder
10aux endpoints.
11"""
13from __future__ import annotations
15from typing import TYPE_CHECKING, Optional
17from ..models import DocumentLine, ListResponse, DocumentLineListQueryParameters
19if TYPE_CHECKING:
20 from ..connect import AsyncHenrriClient
22DOCUMENT_ENDPOINT = "/v1/documents"
24class AsyncDocumentLinesClient:
25 """
26 Accès asynchrone aux lignes de document.
28 Arguments
29 - ``client`` : Objet ``henrri_connect.AsyncHenrriClient``.
31 Methods
32 - ``list_document_lines`` : Liste les lignes d'un document.
33 - ``add`` : Ajoute une ligne à un document.
34 - ``get`` : Récupère une ligne de document par son identifiant.
35 - ``modify`` : Modifie une ligne de document par son identifiant.
36 - ``delete`` : Supprime une ligne de document par son identifiant.
37 - ``move`` : Déplace une ligne vers une position donnée.
38 """
40 def __init__(self, client: AsyncHenrriClient) -> None:
41 self._c = client
43 async def list_document_lines(
44 self,
45 document_id: int,
46 query_params: Optional[DocumentLineListQueryParameters] = None,
47 ) -> ListResponse[DocumentLine]:
48 """
49 Liste les lignes d'un document.
51 Arguments
52 - ``document_id`` (int) : Identifiant du document (min 1 et max 2 147 483 647).
53 - ``query_params`` (DocumentLineListQueryParameters, optional) : Paramètres de requête.
55 Returns
56 - ``ListResponse[DocumentLine]`` : Liste de lignes de document.
57 """
58 if query_params:
59 resp = await self._c.request(
60 "GET",
61 f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
62 params=query_params.model_dump(
63 by_alias=True,
64 exclude_unset=True,
65 exclude_none=True
66 ),
67 )
68 else:
69 resp = await self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines")
70 return ListResponse[DocumentLine].model_validate(resp.json())
72 async def add(self, document_id: int, line: DocumentLine) -> DocumentLine:
73 """
74 Ajoute une ligne à un document.
76 Arguments
77 - ``document_id`` : Identifiant du document.
78 - ``line`` : Ligne de document.
80 Returns
81 - ``DocumentLine`` : Ligne de document ajoutée.
82 """
83 resp = await self._c.request(
84 "POST",
85 f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
86 json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
87 )
88 return DocumentLine.model_validate(resp.json())
90 async def get(self, document_id: int, line_id: int) -> DocumentLine:
91 """
92 Récupère une ligne de document par son identifiant.
94 Arguments
95 - ``document_id`` : Identifiant du document.
96 - ``line_id`` : Identifiant de la ligne de document.
98 Returns
99 - ``DocumentLine`` : Ligne de document.
100 """
101 resp = await self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
102 return DocumentLine.model_validate(resp.json())
104 async def modify(self, document_id: int, line_id: int, line: DocumentLine) -> DocumentLine:
105 """
106 Met à jour une ligne de document.
108 Arguments
109 - ``document_id`` : Identifiant du document.
110 - ``line_id`` : Identifiant de la ligne de document.
111 - ``line`` : Ligne de document.
113 Returns
114 - ``DocumentLine`` : Ligne de document modifiée.
115 """
116 resp = await self._c.request(
117 "PUT",
118 f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}",
119 json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
120 )
121 return DocumentLine.model_validate(resp.json())
123 async def delete(self, document_id: int, line_id: int) -> None:
124 """
125 Supprime une ligne de document.
127 Arguments
128 - ``document_id`` : Identifiant du document.
129 - ``line_id`` : Identifiant de la ligne de document.
131 Returns
132 - ``None``
133 """
134 await self._c.request("DELETE", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
136 async def move(self, document_id: int, line_id: int, to: int) -> None:
137 """
138 Déplace une ligne vers une position donnée.
140 Arguments
141 - ``document_id`` : Identifiant du document.
142 - ``line_id`` : Identifiant de la ligne de document.
143 - ``to`` : Position de destination.
145 Returns
146 - ``None``
147 """
148 await self._c.request(
149 "POST",
150 f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}/move",
151 json={"to": to},
152 )