Coverage for src/henrri_connect/users/asynchro.py: 88%
25 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 10:54 +0200
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 10:54 +0200
1"""
2Sous-client pour les endpoints /v1/users.
4Classes:
5- ``henrri_connect.users.asynchro.AsyncUsersClient`` : Accès asynchrone aux endpoints utilisateurs.
7Notes:
8- Utiliser de préférence l'objet ``henrri_connect.AsyncHenrriClient`` pour acceder aux endpoints.
9"""
11from __future__ import annotations
13from typing import TYPE_CHECKING
15from ..models import Address, TokenResponse, User, UserAndCompany
17if TYPE_CHECKING:
18 from ..connect import AsyncHenrriClient
20USERS_ENDPOINT = "/v1/users"
22class AsyncUsersClient:
23 """
24 Accès asynchrone aux endpoints utilisateurs.
26 Arguments
27 - client (AsyncHenrriClient) : Client asynchrone pour acceder aux endpoints.
29 Methods
30 - get(user_id: int) : Récupère un utilisateur par son identifiant.
31 - get_address(user_id: int) : Récupère l'adresse d'un utilisateur.
32 - get_companies() : Récupère les entreprises associées à l'utilisateur courant.
33 - authenticate() : Authentifie via les identifiants du client.
34 - refresh_token(refresh_token: str) : Rafraîchit le token d'accès.
35 """
37 def __init__(self, client: AsyncHenrriClient) -> None:
38 self._c = client
40 async def get(self, user_id: int) -> User:
41 """
42 Récupère un utilisateur par son identifiant.
44 Arguments
45 - ``user_id`` (int) : Identifiant de l'utilisateur.
47 Returns
48 - ``User`` : Utilisateur.
49 """
50 resp = await self._c.request("GET", f"{USERS_ENDPOINT}/{user_id}")
51 return User.model_validate(resp.json())
53 async def get_address(self, user_id: int) -> Address:
54 """
55 Récupère l'adresse d'un utilisateur.
57 Arguments:
58 - ``user_id`` (int) : Identifiant de l'utilisateur.
60 Returns:
61 - ``henrri_connect.models.Address`` : Adresse de l'utilisateur.
62 """
63 resp = await self._c.request("GET", f"{USERS_ENDPOINT}/{user_id}/address")
64 return Address.model_validate(resp.json())
66 async def get_companies(self) -> list[UserAndCompany]:
67 """
68 Récupère les entreprises associées à l'utilisateur courant.
70 Returns:
71 - ``list[UserAndCompany]`` : Entreprises.
72 """
73 resp = await self._c.request("GET", f"{USERS_ENDPOINT}/companies")
74 return [UserAndCompany.model_validate(item) for item in resp.json()]
76 async def authenticate(self) -> TokenResponse:
77 """
78 Authentifie via les identifiants du client.
80 Returns:
81 - ``henrri_connect.models.TokenResponse`` : Objet contenant access_token et refresh_token.
82 """
83 return await self._c.authenticate()
85 async def refresh_token(self, refresh_token: str) -> TokenResponse:
86 """
87 Rafraîchit le token d'accès.
89 Arguments:
90 - ``refresh_token`` (str) : Token de rafraîchissement.
92 Returns:
93 - ``henrri_connect.models.TokenResponse`` : Objet contenant access_token et refresh_token.
94 """
95 resp = await self._c.request(
96 "POST",
97 f"{USERS_ENDPOINT}/refresh-token",
98 authenticated=False,
99 json={"refreshToken": refresh_token},
100 )
101 token = TokenResponse.model_validate(resp.json())
102 self._c._access_token = token.access_token # pylint: disable=W0212
103 if token.refresh_token:
104 self._c._refresh_token_str = token.refresh_token # pylint: disable=W0212
105 return token