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

1""" 

2Sous-client pour les endpoints /v1/documents/{documentId}/lines. 

3 

4Classes: 

5- ``henrri_connect.document_lines.asynchro.AsyncDocumentLinesClient`` 

6 Accès asynchrone aux endpoints lignes de documents. 

7 

8Notes: 

9- Utiliser de préférence l'objet ``henrri_connect.AsyncHenrriClient`` pour acceder 

10aux endpoints. 

11""" 

12 

13from __future__ import annotations 

14 

15from typing import TYPE_CHECKING, Optional 

16 

17from ..models import DocumentLine, ListResponse, DocumentLineListQueryParameters 

18 

19if TYPE_CHECKING: 

20 from ..connect import AsyncHenrriClient 

21 

22DOCUMENT_ENDPOINT = "/v1/documents" 

23 

24class AsyncDocumentLinesClient: 

25 """ 

26 Accès asynchrone aux lignes de document. 

27 

28 Arguments 

29 - ``client`` : Objet ``henrri_connect.AsyncHenrriClient``. 

30 

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 """ 

39 

40 def __init__(self, client: AsyncHenrriClient) -> None: 

41 self._c = client 

42 

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. 

50 

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. 

54 

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()) 

71 

72 async def add(self, document_id: int, line: DocumentLine) -> DocumentLine: 

73 """ 

74 Ajoute une ligne à un document. 

75 

76 Arguments 

77 - ``document_id`` : Identifiant du document. 

78 - ``line`` : Ligne de document. 

79 

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()) 

89 

90 async def get(self, document_id: int, line_id: int) -> DocumentLine: 

91 """ 

92 Récupère une ligne de document par son identifiant. 

93 

94 Arguments 

95 - ``document_id`` : Identifiant du document. 

96 - ``line_id`` : Identifiant de la ligne de document. 

97 

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()) 

103 

104 async def modify(self, document_id: int, line_id: int, line: DocumentLine) -> DocumentLine: 

105 """ 

106 Met à jour une ligne de document. 

107 

108 Arguments 

109 - ``document_id`` : Identifiant du document. 

110 - ``line_id`` : Identifiant de la ligne de document. 

111 - ``line`` : Ligne de document. 

112 

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()) 

122 

123 async def delete(self, document_id: int, line_id: int) -> None: 

124 """ 

125 Supprime une ligne de document. 

126 

127 Arguments 

128 - ``document_id`` : Identifiant du document. 

129 - ``line_id`` : Identifiant de la ligne de document. 

130 

131 Returns 

132 - ``None`` 

133 """ 

134 await self._c.request("DELETE", f"{DOCUMENT_ENDPOINT}/{document_id}/lines/{line_id}") 

135 

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. 

139 

140 Arguments 

141 - ``document_id`` : Identifiant du document. 

142 - ``line_id`` : Identifiant de la ligne de document. 

143 - ``to`` : Position de destination. 

144 

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 )