Coverage for src/henrri_connect/document_lines/synchro.py: 96%
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.synchro.SyncDocumentLinesClient``
6 Accès synchrone aux endpoints lignes de documents.
8Notes:
9- Utiliser de préférence l'objet ``henrri_connect.SyncHenrriClient`` pour acceder aux endpoints.
10"""
12from __future__ import annotations
14from typing import TYPE_CHECKING, Optional
16from ..models import DocumentLine, ListResponse, DocumentLineListQueryParameters
18if TYPE_CHECKING:
19 from ..connect import SyncHenrriClient
21DOCUMENT_ENDPOINT = "/v1/documents"
23class SyncDocumentLinesClient:
24 """
25 Accès synchrone aux lignes de document.
27 Arguments
28 - ``client`` : Objet ``henrri_connect.SyncHenrriClient``.
30 Methods
31 - ``list_document_lines`` : Liste les lignes d'un document.
32 - ``add`` : Ajoute une ligne à un document.
33 - ``get`` : Récupère une ligne de document par son identifiant.
34 - ``modify`` : Met à jour une ligne de document.
35 - ``delete`` : Supprime une ligne de document.
36 - ``move`` : Déplace une ligne vers une position donnée.
37 """
39 def __init__(self, client: SyncHenrriClient) -> None:
40 self._c = client
42 def list_document_lines(
43 self,
44 document_id: int,
45 query_params: Optional[DocumentLineListQueryParameters] = None,
46 ) -> ListResponse[DocumentLine]:
47 """
48 Liste les lignes d'un document.
50 Arguments
51 - ``document_id`` (int) : Identifiant du document (min 1 et max 2 147 483 647).
52 - ``query_params`` (DocumentLineListQueryParameters, optional) : Paramètres de requête.
54 Returns
55 - ``ListResponse[DocumentLine]`` : Liste de lignes de document.
56 """
57 if query_params:
58 resp = self._c.request(
59 "GET",
60 f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
61 params=query_params.model_dump(
62 by_alias=True,
63 exclude_unset=True,
64 exclude_none=True
65 ),
66 )
67 else:
68 resp = self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines")
69 return ListResponse[DocumentLine].model_validate(resp.json())
71 def add(self, document_id: int, line: DocumentLine) -> DocumentLine:
72 """
73 Ajoute une ligne à un document.
75 Arguments
76 - ``document_id`` : Identifiant du document.
77 - ``line`` : Ligne de document.
79 Returns
80 - ``DocumentLine`` : Ligne de document ajoutée.
81 """
82 resp = self._c.request(
83 "POST",
84 f"{DOCUMENT_ENDPOINT}/{document_id}/lines",
85 json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
86 )
87 return DocumentLine.model_validate(resp.json())
89 def get(self, document_id: int, line_id: int) -> DocumentLine:
90 """
91 Récupère une ligne de document par son identifiant.
93 Arguments
94 - ``document_id`` : Identifiant du document.
95 - ``line_id`` : Identifiant de la ligne de document.
97 Returns
98 - ``DocumentLine`` : Ligne de document.
99 """
100 resp = self._c.request("GET", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
101 return DocumentLine.model_validate(resp.json())
103 def modify(self, document_id: int, line_id: int, line: DocumentLine) -> DocumentLine:
104 """
105 Met à jour une ligne de document.
107 Arguments
108 - ``document_id`` : Identifiant du document.
109 - ``line_id`` : Identifiant de la ligne de document.
110 - ``line`` : Ligne de document.
112 Returns
113 - ``DocumentLine`` : Ligne de document modifiée.
114 """
115 resp = self._c.request(
116 "PUT",
117 f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}",
118 json=line.model_dump(by_alias=True, exclude_unset=True, exclude_none=True),
119 )
120 return DocumentLine.model_validate(resp.json())
122 def delete(self, document_id: int, line_id: int) -> None:
123 """
124 Supprime une ligne de document.
126 Arguments
127 - ``document_id`` : Identifiant du document.
128 - ``line_id`` : Identifiant de la ligne de document.
130 Returns
131 - ``None``
132 """
133 self._c.request("DELETE", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}")
135 def move(self, document_id: int, line_id: int, to: int) -> None:
136 """
137 Déplace une ligne vers une position donnée.
139 Arguments
140 - ``document_id`` : Identifiant du document.
141 - ``line_id`` : Identifiant de la ligne de document.
142 - ``to`` : Position de destination.
144 Returns
145 - ``None``
146 """
147 self._c.request(
148 "POST",
149 f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}/move",
150 json={"to": to},
151 )