elrahapi 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- elrahapi-1.0.0/PKG-INFO +1198 -0
- elrahapi-1.0.0/README.md +1181 -0
- elrahapi-1.0.0/elrahapi/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/__main__.py +189 -0
- elrahapi-1.0.0/elrahapi/authentication/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/authentication/authenticate.py +214 -0
- elrahapi-1.0.0/elrahapi/authentication/token.py +16 -0
- elrahapi-1.0.0/elrahapi/authorization/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/authorization/meta_model.py +32 -0
- elrahapi-1.0.0/elrahapi/authorization/privilege_model.py +39 -0
- elrahapi-1.0.0/elrahapi/authorization/role_model.py +34 -0
- elrahapi-1.0.0/elrahapi/authorization/role_privilege_model.py +28 -0
- elrahapi-1.0.0/elrahapi/crud/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/crud/crud_forgery.py +155 -0
- elrahapi-1.0.0/elrahapi/crud/link_class.py +22 -0
- elrahapi-1.0.0/elrahapi/crud/user_crud_forgery.py +73 -0
- elrahapi-1.0.0/elrahapi/exception/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/exception/auth_exception.py +21 -0
- elrahapi-1.0.0/elrahapi/exception/custom_http_exception.py +6 -0
- elrahapi-1.0.0/elrahapi/exception/exceptions_utils.py +6 -0
- elrahapi-1.0.0/elrahapi/middleware/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/middleware/crud_middleware.py +79 -0
- elrahapi-1.0.0/elrahapi/middleware/error_middleware.py +75 -0
- elrahapi-1.0.0/elrahapi/middleware/log_middleware.py +19 -0
- elrahapi-1.0.0/elrahapi/middleware/loggerapp/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_crud.py +9 -0
- elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_model.py +6 -0
- elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_router.py +14 -0
- elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_schema.py +7 -0
- elrahapi-1.0.0/elrahapi/middleware/models.py +37 -0
- elrahapi-1.0.0/elrahapi/router/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/router/route_config.py +65 -0
- elrahapi-1.0.0/elrahapi/router/router_crud.py +67 -0
- elrahapi-1.0.0/elrahapi/router/router_default_routes_name.py +24 -0
- elrahapi-1.0.0/elrahapi/router/router_namespace.py +112 -0
- elrahapi-1.0.0/elrahapi/router/router_provider.py +220 -0
- elrahapi-1.0.0/elrahapi/router/user_router_provider.py +200 -0
- elrahapi-1.0.0/elrahapi/security/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/security/secret.py +0 -0
- elrahapi-1.0.0/elrahapi/settings/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/settings/database.py +17 -0
- elrahapi-1.0.0/elrahapi/settings/models_metadata.py +10 -0
- elrahapi-1.0.0/elrahapi/settings/secret.py +19 -0
- elrahapi-1.0.0/elrahapi/sqlapp/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/sqlapp/cruds.py +12 -0
- elrahapi-1.0.0/elrahapi/sqlapp/models.py +21 -0
- elrahapi-1.0.0/elrahapi/sqlapp/router.py +24 -0
- elrahapi-1.0.0/elrahapi/sqlapp/schemas.py +18 -0
- elrahapi-1.0.0/elrahapi/sqlapp/utils.py +0 -0
- elrahapi-1.0.0/elrahapi/user/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/user/models.py +161 -0
- elrahapi-1.0.0/elrahapi/user/userapp/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/user/userapp/user_cruds.py +54 -0
- elrahapi-1.0.0/elrahapi/user/userapp/user_models.py +47 -0
- elrahapi-1.0.0/elrahapi/user/userapp/user_router_providers.py +51 -0
- elrahapi-1.0.0/elrahapi/user/userapp/user_routers.py +24 -0
- elrahapi-1.0.0/elrahapi/user/userapp/user_schemas.py +21 -0
- elrahapi-1.0.0/elrahapi/utility/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/utility/utils.py +27 -0
- elrahapi-1.0.0/elrahapi/websocket/__init__.py +0 -0
- elrahapi-1.0.0/elrahapi/websocket/connectionManager.py +20 -0
- elrahapi-1.0.0/elrahapi.egg-info/PKG-INFO +1198 -0
- elrahapi-1.0.0/elrahapi.egg-info/SOURCES.txt +67 -0
- elrahapi-1.0.0/elrahapi.egg-info/dependency_links.txt +1 -0
- elrahapi-1.0.0/elrahapi.egg-info/entry_points.txt +2 -0
- elrahapi-1.0.0/elrahapi.egg-info/requires.txt +4 -0
- elrahapi-1.0.0/elrahapi.egg-info/top_level.txt +1 -0
- elrahapi-1.0.0/setup.cfg +4 -0
- elrahapi-1.0.0/setup.py +24 -0
elrahapi-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,1198 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: elrahapi
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Package personnalisé pour faciliter le développement avec python avec fastapi
|
|
5
|
+
Home-page: https://github.com/Harlequelrah/Library-ElrahAPI
|
|
6
|
+
Author: Harlequelrah
|
|
7
|
+
Author-email: maximeatsoudegbovi@example.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: fastapi[standard]>=0.112.0
|
|
14
|
+
Requires-Dist: alembic>=1.13.3
|
|
15
|
+
Requires-Dist: virtualenv>=20.26.6
|
|
16
|
+
Requires-Dist: mysql-connector-python>=9.0.0
|
|
17
|
+
|
|
18
|
+
# I - **`Description`**
|
|
19
|
+
|
|
20
|
+
Passioné par la programmation et le développement avec python je me lance dans la création progressive d'une bibliothèque personnalisée ou framework basé sur pour `FASTAPI` m'ameliorer , devenir plus productif et partager mon expertise .
|
|
21
|
+
|
|
22
|
+
# II - **`Installation`**
|
|
23
|
+
|
|
24
|
+
- **Avec Github :**
|
|
25
|
+
```bash
|
|
26
|
+
git clone https://github.com/Harlequelrah/Library-ElrahAPI
|
|
27
|
+
```
|
|
28
|
+
- **Avec pip :**
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install elrahapi
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
# III - **`Utilisation`**
|
|
35
|
+
|
|
36
|
+
Ce package contient plusieurs modules utiles pour accélérer et modulariser le dévéloppement avec FASTAPI. Voici un aperçu de leurs fonctionnalités.
|
|
37
|
+
|
|
38
|
+
## 1. `Commandes`
|
|
39
|
+
|
|
40
|
+
#### 1.1. **Commande de création du projet**
|
|
41
|
+
|
|
42
|
+
Cette commande permet de générer un projet FASTAPI avec une archictecture définie
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
elrahapi startproject nomduprojet
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**`architecture`:**
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
nomduprojet/
|
|
52
|
+
├── __init__.py
|
|
53
|
+
├── .gitignore
|
|
54
|
+
├── alembic/
|
|
55
|
+
├── alembic.ini
|
|
56
|
+
├── requirements.txt
|
|
57
|
+
├── env/
|
|
58
|
+
├── __main__.py
|
|
59
|
+
├── nomduprojet/
|
|
60
|
+
│ ├── __init__.py
|
|
61
|
+
│ ├── main.py
|
|
62
|
+
│ ├── settings/
|
|
63
|
+
│ ├── .gitignore
|
|
64
|
+
│ ├── __init__.py
|
|
65
|
+
│ ├── database.py
|
|
66
|
+
│ ├── secret.py
|
|
67
|
+
│ └── models_metadata.py
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### 1.2. **Commande de génération d'une application**
|
|
71
|
+
|
|
72
|
+
Cette commande permet de créer une application dans le projet
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
elrahapi startapp nomappli
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**`architecture`:**
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
sqlapp/
|
|
82
|
+
├── __init__.py
|
|
83
|
+
├── cruds.py
|
|
84
|
+
├── models.py
|
|
85
|
+
├── router.py
|
|
86
|
+
├── schemas.py
|
|
87
|
+
├── utils.py
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### 1.3. **Commande génération d'une application utilisateur**
|
|
91
|
+
|
|
92
|
+
Cette commande permet de créer une application utilisateur
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
elrahapi generate userapp
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**`architecture`:**
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
userapp/
|
|
102
|
+
├── __init__.py
|
|
103
|
+
├── user_cruds.py
|
|
104
|
+
├── user_models.py
|
|
105
|
+
├── user_router_providers.py
|
|
106
|
+
├── user_routers.py
|
|
107
|
+
├── user_schemas.py
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### 1.4. **Commande de génération d'une application de log**
|
|
111
|
+
|
|
112
|
+
Cette commande permet de créer une application de log
|
|
113
|
+
|
|
114
|
+
**`architecture`:**
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
loggerapp/
|
|
118
|
+
├── __init__.py
|
|
119
|
+
├── log_user.py
|
|
120
|
+
├── log_model.py
|
|
121
|
+
├── log_crud.py
|
|
122
|
+
├── log_router.py
|
|
123
|
+
├── log_schema.py
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 2. `Modules`
|
|
127
|
+
|
|
128
|
+
### 2.1. **Module `exception`**
|
|
129
|
+
|
|
130
|
+
Ce module contient des exceptions personnalisées utilisés dans cette bibliothèque
|
|
131
|
+
|
|
132
|
+
#### 2.1.1. Sous module `auth_exception`
|
|
133
|
+
|
|
134
|
+
ce sous module dispose de quelques variables d'exceptions prédéfinies liés à l'authentification
|
|
135
|
+
|
|
136
|
+
- `INVALID_CREDENTIALS_CUSTOM_HTTP_EXCEPTION` : exception personnalisée de paramètres d'authentification invalides .
|
|
137
|
+
|
|
138
|
+
- `INACTIVE_USER_CUSTOM_HTTP_EXCEPTION` : exception personnalisée de compte utilisateur inactive .
|
|
139
|
+
|
|
140
|
+
- `INSUFICIENT_PERMISSIONS_CUSTOM_HTTP_EXCEPTION` : exception personnalisée lorsqu'un utilisateur n'a pas les permissions suffisantes pour acceder à une ressource .
|
|
141
|
+
|
|
142
|
+
#### 2.1.2. Sous module `exceptions_utils`
|
|
143
|
+
|
|
144
|
+
ce sous module contient des fonction utilitaires pour les exceptions
|
|
145
|
+
|
|
146
|
+
- `raise_custom_http_exception` : lève une erreur CustomHttpException
|
|
147
|
+
|
|
148
|
+
- **paramètres** :
|
|
149
|
+
|
|
150
|
+
- `status_code` : **int**
|
|
151
|
+
|
|
152
|
+
- `detail` : **str**
|
|
153
|
+
|
|
154
|
+
#### 2.1.3. Sous module custom_http_exception
|
|
155
|
+
|
|
156
|
+
- `CustomHttpException` : génère une exception personnalisé qui definit une exception de type HTTPExeption.
|
|
157
|
+
|
|
158
|
+
### 2.2. **Module `utility`**
|
|
159
|
+
|
|
160
|
+
Ce module contient des utilitaires .
|
|
161
|
+
|
|
162
|
+
#### 2.2.1. Sous module `utils`
|
|
163
|
+
|
|
164
|
+
Ce sous module contient des quelques fonctions utiles .
|
|
165
|
+
|
|
166
|
+
- `update_entity` : mets à jour les champs d'une entité objet .
|
|
167
|
+
|
|
168
|
+
- **paramètres** :
|
|
169
|
+
|
|
170
|
+
- existing_entity : l'entité existante à mettre à jour.
|
|
171
|
+
|
|
172
|
+
- update_entity : l'entité pour mettre : l'entité pour la mise à jour .
|
|
173
|
+
|
|
174
|
+
- **sortie** : **existing_entity**
|
|
175
|
+
|
|
176
|
+
- `validate_value_type` : permet valider une valeur pour s'assurer qu'il est conforme à son type
|
|
177
|
+
|
|
178
|
+
- **paramètres** :
|
|
179
|
+
|
|
180
|
+
- value : la valeur à vérifier.
|
|
181
|
+
|
|
182
|
+
- **sortie** : **value**
|
|
183
|
+
|
|
184
|
+
- **utilisation** :
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
myvalue= validate_value_type("True") # retourne True
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- **create_database_if_not_exists** : créer la base de donnée si elle n'existe pas .
|
|
191
|
+
|
|
192
|
+
- **paramètres** :
|
|
193
|
+
|
|
194
|
+
- database_url : **str** [l'url de la base de donnée dans le nom de la base de donnée] .
|
|
195
|
+
|
|
196
|
+
- database_name : **str** [le nom de la base de donnée]
|
|
197
|
+
|
|
198
|
+
### 2.3. **Module `authentication`**
|
|
199
|
+
|
|
200
|
+
Ce module contient des classes et des fonctions utilisées pour l'authentification.
|
|
201
|
+
|
|
202
|
+
#### 2.3.1. Sous module `token`
|
|
203
|
+
|
|
204
|
+
Ce sous module définit des classes pydantics pour la gestions des tokens :
|
|
205
|
+
|
|
206
|
+
- AccessToken :
|
|
207
|
+
|
|
208
|
+
- access_token : **str**
|
|
209
|
+
|
|
210
|
+
- token_type : **str**
|
|
211
|
+
|
|
212
|
+
- RefreshToken :
|
|
213
|
+
|
|
214
|
+
- refresh_token : **str**
|
|
215
|
+
|
|
216
|
+
- token_type : **str**
|
|
217
|
+
|
|
218
|
+
- Token :
|
|
219
|
+
|
|
220
|
+
- access_token : **str**
|
|
221
|
+
|
|
222
|
+
- refresh_token : **str**
|
|
223
|
+
|
|
224
|
+
- token_type : **str**
|
|
225
|
+
|
|
226
|
+
#### 2.3.2 Sous module `authenticate`
|
|
227
|
+
|
|
228
|
+
ce sous module définit les classes et fonctions utilisées pour l'authentification
|
|
229
|
+
|
|
230
|
+
**`Classe Authentication`**: classe principale pour gérer l'authentification
|
|
231
|
+
|
|
232
|
+
**Attributs**
|
|
233
|
+
|
|
234
|
+
- `TOKEN_URL` : définit l'url du schéma d'authentication
|
|
235
|
+
|
|
236
|
+
- `OAUTH2_SCHEME` : définit le schéma d'authentication
|
|
237
|
+
|
|
238
|
+
- `User` : le modèle d'utilisateur SQLAlchemy
|
|
239
|
+
|
|
240
|
+
- `UserCreateModel` : le modèle pydantic pour la création d'utilisateur
|
|
241
|
+
|
|
242
|
+
- `UserUpdateModel` : le modèle pydantic pour la mise à jour d'utilisateur
|
|
243
|
+
|
|
244
|
+
- `UserPydanticModel` : le modèle pydantic pour lire un utilisateur
|
|
245
|
+
|
|
246
|
+
- `UserLoginRequestModel` : le modèle pydantic la connexion d'utilisateur
|
|
247
|
+
|
|
248
|
+
- `__secret_key` : **str** [une clé secrète générer par défaut]
|
|
249
|
+
|
|
250
|
+
- `ALGORITHMS` : **List[str]** [un tableau d'algorithm [par défaut **[`HS256`]**]
|
|
251
|
+
|
|
252
|
+
- `__algorithm` : **str** [un élément de ALGORITHMS]
|
|
253
|
+
|
|
254
|
+
- `REFRESH_TOKEN_EXPIRE_DAYS` : **int**
|
|
255
|
+
|
|
256
|
+
- `ACCESS_TOKEN_EXPIRE_MINUTES` : **int**
|
|
257
|
+
|
|
258
|
+
- `__session_factory` : **sessionmaker[Session]**
|
|
259
|
+
|
|
260
|
+
**methodes**
|
|
261
|
+
|
|
262
|
+
- `__init__` :
|
|
263
|
+
|
|
264
|
+
- **paramètres** :
|
|
265
|
+
|
|
266
|
+
- database_username : **str**
|
|
267
|
+
|
|
268
|
+
- database_password : **str**
|
|
269
|
+
|
|
270
|
+
- connector : **str**
|
|
271
|
+
|
|
272
|
+
- database_name : **str**
|
|
273
|
+
|
|
274
|
+
- server : **str**
|
|
275
|
+
|
|
276
|
+
- `set_oauth2_scheme` : modifie le schéma d'authentification
|
|
277
|
+
|
|
278
|
+
- **paramètres** :
|
|
279
|
+
|
|
280
|
+
- OAUTH2_CLASS: **type**
|
|
281
|
+
|
|
282
|
+
- `get_session` : retourne une session
|
|
283
|
+
|
|
284
|
+
- **sortie** : `Session`
|
|
285
|
+
|
|
286
|
+
- `is_authorized` : verifie si un utilisateur a un privilège
|
|
287
|
+
|
|
288
|
+
- **paramètres** :
|
|
289
|
+
|
|
290
|
+
- user_id : **int**
|
|
291
|
+
|
|
292
|
+
- privilege_id : **int**
|
|
293
|
+
|
|
294
|
+
- **sortie** : **bool**
|
|
295
|
+
|
|
296
|
+
- `authenticate_user` : authentifie un utilisateur
|
|
297
|
+
|
|
298
|
+
- **paramètres** :
|
|
299
|
+
|
|
300
|
+
- password : **str**
|
|
301
|
+
|
|
302
|
+
- username_or_email : **str**
|
|
303
|
+
|
|
304
|
+
- session : **Optional[Session]**
|
|
305
|
+
|
|
306
|
+
- **sortie** : **User**
|
|
307
|
+
|
|
308
|
+
- `create_access_token` : créer un token d'acces
|
|
309
|
+
|
|
310
|
+
- **paramètres** :
|
|
311
|
+
|
|
312
|
+
- data : **dict**
|
|
313
|
+
|
|
314
|
+
- expires_delta : **timedelta**
|
|
315
|
+
|
|
316
|
+
- **sortie** : **AccessToken**
|
|
317
|
+
|
|
318
|
+
- `create_refresh_token` : créer un token de rafraichissement
|
|
319
|
+
|
|
320
|
+
- **paramètres** :
|
|
321
|
+
|
|
322
|
+
- data : **dict**
|
|
323
|
+
|
|
324
|
+
- expires_delta : **timedelta**
|
|
325
|
+
|
|
326
|
+
- **sortie** : **RefreshToken**
|
|
327
|
+
|
|
328
|
+
- `get_access_token` : retourne le token d'accès de l'utilisateur actuellement authentifié .
|
|
329
|
+
|
|
330
|
+
- **sortie** : **str**
|
|
331
|
+
|
|
332
|
+
- `get_current_user` : retourne l'utilisateur actuellement authentifié .
|
|
333
|
+
|
|
334
|
+
- **sortie** : **User**
|
|
335
|
+
|
|
336
|
+
- `validate_token` : valide le token et retourne un payload
|
|
337
|
+
|
|
338
|
+
- **paramètres** :
|
|
339
|
+
|
|
340
|
+
- token : **str**
|
|
341
|
+
|
|
342
|
+
- **sortie** : **dict[str,any]**
|
|
343
|
+
|
|
344
|
+
- `refresh_token` : rafraichi un token d'acces par un token de rafraichissement
|
|
345
|
+
|
|
346
|
+
- **paramètres** :
|
|
347
|
+
|
|
348
|
+
- refresh_token_datat : **RefreshToken**
|
|
349
|
+
|
|
350
|
+
- **sortie** : **AccessToken**
|
|
351
|
+
|
|
352
|
+
- `check_authorization` : vérifie des authorizations suivant des roles ou privilèges en retournant un objet **callable** qui sera utilisé comme dépendence
|
|
353
|
+
|
|
354
|
+
- **paramètres** :
|
|
355
|
+
|
|
356
|
+
- privilege_name: **Optional[List[str]]**
|
|
357
|
+
|
|
358
|
+
- roles_name : **Optional[List[str]]**
|
|
359
|
+
|
|
360
|
+
- **sortie** : **callable**
|
|
361
|
+
|
|
362
|
+
- `get_user_by_sub` : retourne un utilisateur à partir de son username ou email
|
|
363
|
+
|
|
364
|
+
- **paramètres** :
|
|
365
|
+
|
|
366
|
+
- username_or_email : **str**
|
|
367
|
+
|
|
368
|
+
- db : **Session**
|
|
369
|
+
|
|
370
|
+
- **sortie** : **User**
|
|
371
|
+
|
|
372
|
+
### 2.4. **Module `authorization`**
|
|
373
|
+
|
|
374
|
+
Ce module contient des classes et des fonctions utilisées pour l'autorisation.
|
|
375
|
+
|
|
376
|
+
#### 2.4.1. Sous module `meta_model`
|
|
377
|
+
|
|
378
|
+
Ce sous module contient des models Meta pour définir les models liés à l'authorization et pour lire partiellement des données .
|
|
379
|
+
|
|
380
|
+
- `MetaAuthorization` : classe pour définir les models SQLAlchemy Role et Privilege
|
|
381
|
+
|
|
382
|
+
- id : **Column(Integer)**
|
|
383
|
+
|
|
384
|
+
- name : **Column(String)**
|
|
385
|
+
|
|
386
|
+
- normalizedName : **Column(String)** [automatique à l'ajout de name]
|
|
387
|
+
|
|
388
|
+
- description : **Column(String)**
|
|
389
|
+
|
|
390
|
+
- `MetaAuthorizationBaseModel` : classe pour définir les Models Meta pour Role et Privilege .
|
|
391
|
+
|
|
392
|
+
- id : **int**
|
|
393
|
+
|
|
394
|
+
- normalizedName : **str**
|
|
395
|
+
|
|
396
|
+
- is_active : **bool**
|
|
397
|
+
|
|
398
|
+
- `MetaAuthorizationPydanticModel(MetaAuthorizationModel)` ; classe pour définir les Models Pydantic complet pour Role et Privilege.
|
|
399
|
+
|
|
400
|
+
- name : **str**
|
|
401
|
+
|
|
402
|
+
#### 2.4.2 Sous module `role_model`
|
|
403
|
+
|
|
404
|
+
Ce sous module contient les models SQLAlchemy et classes pydantic pour l'entité Role .
|
|
405
|
+
|
|
406
|
+
- `RoleModel(MetaAuthorization)`
|
|
407
|
+
|
|
408
|
+
- `RoleBaseModel` :
|
|
409
|
+
|
|
410
|
+
- name : **str**
|
|
411
|
+
|
|
412
|
+
- `RoleCreateModel(RoleBaseModel)` :
|
|
413
|
+
|
|
414
|
+
- description : **str**
|
|
415
|
+
|
|
416
|
+
- privileges : **Optional[List[PrivilegeCreateModel]]**
|
|
417
|
+
|
|
418
|
+
- `RoleUpdateModel`
|
|
419
|
+
|
|
420
|
+
- name : **Optional[str]**
|
|
421
|
+
|
|
422
|
+
- description : **Optional[str]**
|
|
423
|
+
|
|
424
|
+
- is_active : **Optional[bool]**
|
|
425
|
+
|
|
426
|
+
- `RolePydanticModel(MetaAuthorizationPydanticModel)` :
|
|
427
|
+
|
|
428
|
+
- privileges : **List[MetaAuthorizationBaseModel]**
|
|
429
|
+
|
|
430
|
+
#### 2.4.3. Sous module `privilege_model`
|
|
431
|
+
|
|
432
|
+
Ce sous module contient les models SQLAlchemy et classes pydantic pour l'entité Privilege .
|
|
433
|
+
|
|
434
|
+
- `PrivilegeModel(MetaAuthorization)`
|
|
435
|
+
|
|
436
|
+
- `PrivilegeBaseModel`
|
|
437
|
+
|
|
438
|
+
- name : **str**
|
|
439
|
+
|
|
440
|
+
- `PrivilegeCreateModel`:
|
|
441
|
+
|
|
442
|
+
- description : **str**
|
|
443
|
+
|
|
444
|
+
- `PrivilegeUpdateModel` :
|
|
445
|
+
|
|
446
|
+
- name : **Optional[str]**
|
|
447
|
+
|
|
448
|
+
- description : **Optional[str]**
|
|
449
|
+
|
|
450
|
+
- is_active : **Optional[bool]**
|
|
451
|
+
|
|
452
|
+
- `PrivilegePydanticModel(MetaAuthorizationPydanticModel)` :
|
|
453
|
+
|
|
454
|
+
- roles : **Optional[List[MetaAuthorizationBaseModel]]**
|
|
455
|
+
|
|
456
|
+
- privilege_users : **Optional[List[MetaPrivilegeUsers]]**
|
|
457
|
+
|
|
458
|
+
#### 2.4.4. Sous module `role_privilege_model`
|
|
459
|
+
|
|
460
|
+
Ce sous module contient les models SQLAlchemy et classes pydantic pour l'entité RolePrivilege .
|
|
461
|
+
|
|
462
|
+
- `RolePrivilegeModel`
|
|
463
|
+
|
|
464
|
+
- id : **Column(Integer)**
|
|
465
|
+
|
|
466
|
+
- role_id : **Column(Integer)**
|
|
467
|
+
|
|
468
|
+
- privilege_id : **Column(Integer)**
|
|
469
|
+
|
|
470
|
+
- `RolePrivilegeCreateModel`
|
|
471
|
+
|
|
472
|
+
- role_id : **int**
|
|
473
|
+
|
|
474
|
+
- privilege : **int**
|
|
475
|
+
|
|
476
|
+
- `RolePrivilegeUpdateModel`
|
|
477
|
+
|
|
478
|
+
- role_id : **Optional[int]**
|
|
479
|
+
|
|
480
|
+
- privilege : **Optional[int]**
|
|
481
|
+
|
|
482
|
+
- `RolePrivilegePydanticModel(RolePrivilegeCreateModel)`
|
|
483
|
+
- id : **int**
|
|
484
|
+
|
|
485
|
+
### 2.5. **Module `middleware`**
|
|
486
|
+
|
|
487
|
+
Ce module regroupe toute la gestion des middelwares
|
|
488
|
+
|
|
489
|
+
##### 2.5.1. Sous module `models`
|
|
490
|
+
|
|
491
|
+
Ce sous module définit les modèles de Log : `LoggerMiddlewareModel` et `LoggerMiddlewarePydanticModel` pour la validation Pydantic
|
|
492
|
+
|
|
493
|
+
`LoggerMiddlewareModel`:
|
|
494
|
+
|
|
495
|
+
**Attributs prédéfinis**:
|
|
496
|
+
|
|
497
|
+
- id : **Column(Integer)**
|
|
498
|
+
|
|
499
|
+
- status_code :**Column(Integer)**
|
|
500
|
+
|
|
501
|
+
- method : **Column(String)**
|
|
502
|
+
|
|
503
|
+
- url : **Column(String)**
|
|
504
|
+
|
|
505
|
+
- error_message : **Column(Text)**
|
|
506
|
+
|
|
507
|
+
- date_created : **Column(DateTime)**
|
|
508
|
+
|
|
509
|
+
- process_time : **Column(Numeric)**
|
|
510
|
+
|
|
511
|
+
- remote_adress: **Column(String)**
|
|
512
|
+
|
|
513
|
+
`LoggerMiddlewarePydanticModel`:
|
|
514
|
+
|
|
515
|
+
**Attributs prédéfinis**:
|
|
516
|
+
|
|
517
|
+
- id : **int**
|
|
518
|
+
|
|
519
|
+
- status_code : **int**
|
|
520
|
+
|
|
521
|
+
- method : **str**
|
|
522
|
+
|
|
523
|
+
- url : **str**
|
|
524
|
+
|
|
525
|
+
- error_message : **str**
|
|
526
|
+
|
|
527
|
+
- date_created : **datetime**
|
|
528
|
+
|
|
529
|
+
- process_time : **float**
|
|
530
|
+
|
|
531
|
+
- remote_adress: **str**
|
|
532
|
+
|
|
533
|
+
##### 2.5.2 Sous module `log_middleware`
|
|
534
|
+
|
|
535
|
+
Ce sous module définit les middelwares de loggins
|
|
536
|
+
|
|
537
|
+
- Class **`LoggerMiddleware`**
|
|
538
|
+
|
|
539
|
+
- **paramètres** :
|
|
540
|
+
|
|
541
|
+
- LoggerMiddlewareModel : définit le modèle de Log
|
|
542
|
+
|
|
543
|
+
- session_factory : **sessionmaker[Session]**
|
|
544
|
+
|
|
545
|
+
- manager : **ConnectionManager**
|
|
546
|
+
|
|
547
|
+
##### 2.5.3. Sous module `error_middleware`
|
|
548
|
+
|
|
549
|
+
Ce sous module définit les middelwares d'erreurs
|
|
550
|
+
|
|
551
|
+
- Class **`ErrorMiddleware`**
|
|
552
|
+
|
|
553
|
+
- **paramètres** :
|
|
554
|
+
|
|
555
|
+
- LoggerMiddlewareModel : définit le modèle de Log
|
|
556
|
+
|
|
557
|
+
- session_factory : **sessionmaker[Session]**
|
|
558
|
+
|
|
559
|
+
- manager : **ConnectionManager**
|
|
560
|
+
|
|
561
|
+
##### 2.5.4. Sous module crud_middelware
|
|
562
|
+
|
|
563
|
+
ce sous module définit les methodes pour sauvegarder les logs .
|
|
564
|
+
|
|
565
|
+
- **`save_log`** : enregistre les logs
|
|
566
|
+
|
|
567
|
+
- **paramètres**:
|
|
568
|
+
|
|
569
|
+
- **request** : Request
|
|
570
|
+
|
|
571
|
+
- **LoggerMiddelewareModel**
|
|
572
|
+
|
|
573
|
+
- **db** : Session
|
|
574
|
+
|
|
575
|
+
- **call_next**: Optional
|
|
576
|
+
|
|
577
|
+
- **error** : Optional[str]
|
|
578
|
+
|
|
579
|
+
- **response** : Optional[Response]
|
|
580
|
+
|
|
581
|
+
- **manager**: Optional[ConnectionManager]
|
|
582
|
+
|
|
583
|
+
- **paramètres**: **Response**
|
|
584
|
+
|
|
585
|
+
- **`get_response_and_process_time`** : renvoie le temps de la requete et la reponse .
|
|
586
|
+
|
|
587
|
+
- **paramètres**:
|
|
588
|
+
|
|
589
|
+
- **request**: Request
|
|
590
|
+
|
|
591
|
+
- **call_next**:callable
|
|
592
|
+
|
|
593
|
+
- **response** : Response
|
|
594
|
+
|
|
595
|
+
- **call_next**: Optional
|
|
596
|
+
|
|
597
|
+
- **paramètres**: [ **response** , **process_time** ]
|
|
598
|
+
|
|
599
|
+
- **`read_response_body`** : **renvoie une chaine de caractère contenant la partie du detail du body si elle existe du corps de la requête**
|
|
600
|
+
|
|
601
|
+
- **paramètres**:
|
|
602
|
+
|
|
603
|
+
- **response** : Response
|
|
604
|
+
|
|
605
|
+
- **paramètres**: **str**
|
|
606
|
+
|
|
607
|
+
- **`recreate_async_iterator`** : **recree un nouvel itérateur pour la requete**
|
|
608
|
+
|
|
609
|
+
- `paramètres`:
|
|
610
|
+
|
|
611
|
+
- **body** : bytes
|
|
612
|
+
|
|
613
|
+
### 2.6. **Module `user`**
|
|
614
|
+
|
|
615
|
+
Ce module comporte toute la gestion des utilisateurs
|
|
616
|
+
|
|
617
|
+
##### 2.6.1. Sous module `models`
|
|
618
|
+
|
|
619
|
+
Ce sous module comporte tous les models pour l'entité utilisateur .
|
|
620
|
+
|
|
621
|
+
class **`User`**
|
|
622
|
+
|
|
623
|
+
`Attributs`:
|
|
624
|
+
|
|
625
|
+
- id : **Column(Integer)**
|
|
626
|
+
|
|
627
|
+
- email : **Column(String)**
|
|
628
|
+
|
|
629
|
+
- username : **Column(String)**
|
|
630
|
+
|
|
631
|
+
- password : **Column(String)**
|
|
632
|
+
|
|
633
|
+
- lastname : **Column(String)**
|
|
634
|
+
|
|
635
|
+
- date_created : **Column(DateTime)**
|
|
636
|
+
|
|
637
|
+
- date_updated : **Column(DateTime)**
|
|
638
|
+
|
|
639
|
+
- is_active : **Column(Boolean)**
|
|
640
|
+
|
|
641
|
+
- attempt_login : **Column(Integer)**
|
|
642
|
+
|
|
643
|
+
- role_id : **Column(Integer)**
|
|
644
|
+
|
|
645
|
+
- MAX_ATTEMPT_LOGIN = 3
|
|
646
|
+
|
|
647
|
+
- PasswordHasher
|
|
648
|
+
|
|
649
|
+
**`Methodes`** :
|
|
650
|
+
|
|
651
|
+
- `try_login` :
|
|
652
|
+
tente de connecter un utilisateur et mets à jour attempt_login en fonction .
|
|
653
|
+
|
|
654
|
+
- **paramètres** :
|
|
655
|
+
|
|
656
|
+
- is_success : **bool**
|
|
657
|
+
|
|
658
|
+
- **sortie** : **bool**
|
|
659
|
+
|
|
660
|
+
- `set_password` : permet de modifier le mot de passe .
|
|
661
|
+
|
|
662
|
+
- **paramètres** :
|
|
663
|
+
|
|
664
|
+
- password : **str**
|
|
665
|
+
|
|
666
|
+
- **sortie** : **None**
|
|
667
|
+
|
|
668
|
+
- `check_password` : permet de vérifier le mot de passe.
|
|
669
|
+
|
|
670
|
+
- **paramètres** :
|
|
671
|
+
|
|
672
|
+
- password : **str**
|
|
673
|
+
|
|
674
|
+
- **sortie** : **bool**
|
|
675
|
+
|
|
676
|
+
- `has_role` : permet de vérifier si l'utilisateur a un role
|
|
677
|
+
|
|
678
|
+
- **paramètres** :
|
|
679
|
+
|
|
680
|
+
- roles_name : **List[str]**
|
|
681
|
+
|
|
682
|
+
- **sortie** : **bool**
|
|
683
|
+
|
|
684
|
+
- `has_privilege` : permet de vérifier si l'utilisateur a un privilege
|
|
685
|
+
|
|
686
|
+
- **paramètres** :
|
|
687
|
+
|
|
688
|
+
- privilege_name : **str**
|
|
689
|
+
|
|
690
|
+
- **sortie** : **bool**
|
|
691
|
+
|
|
692
|
+
- `UserPrivilegeModel`
|
|
693
|
+
|
|
694
|
+
- id : **Column(Integer)**
|
|
695
|
+
|
|
696
|
+
- user_id : **Column(Integer)**
|
|
697
|
+
|
|
698
|
+
- privilege_id : **Column(Integer)**
|
|
699
|
+
|
|
700
|
+
- is_active : **Column(Integer)**
|
|
701
|
+
|
|
702
|
+
**`Models pydantics pour la validations`** :
|
|
703
|
+
|
|
704
|
+
- `UserBaseModel`
|
|
705
|
+
|
|
706
|
+
- email : **str**
|
|
707
|
+
|
|
708
|
+
- username : **str**
|
|
709
|
+
|
|
710
|
+
- lastname : **str**
|
|
711
|
+
|
|
712
|
+
- firstname : **str**
|
|
713
|
+
|
|
714
|
+
- `UserCreateModel(UserBaseModel)`
|
|
715
|
+
|
|
716
|
+
- password : **str**
|
|
717
|
+
|
|
718
|
+
- role_id : **Optional[int]**
|
|
719
|
+
|
|
720
|
+
- `UserUpdateModel`
|
|
721
|
+
|
|
722
|
+
- email: **Optional[str]**
|
|
723
|
+
|
|
724
|
+
- username: **Optional[str]**
|
|
725
|
+
|
|
726
|
+
- lastname: **Optional[str]**
|
|
727
|
+
|
|
728
|
+
- firstname: **Optional[str]**
|
|
729
|
+
|
|
730
|
+
- is_active: **Optional[bool]**
|
|
731
|
+
|
|
732
|
+
- password: **Optional[str]**
|
|
733
|
+
|
|
734
|
+
- role_id : **Optional[int]**
|
|
735
|
+
|
|
736
|
+
- **`UserPydanticModel(UserBaseModel)`**
|
|
737
|
+
|
|
738
|
+
- id : **int**
|
|
739
|
+
|
|
740
|
+
- date_created : **datetime**
|
|
741
|
+
|
|
742
|
+
- date_updated : **Optional[datetime]**
|
|
743
|
+
|
|
744
|
+
- is_active : **bool**
|
|
745
|
+
|
|
746
|
+
- attempt_login : **int**
|
|
747
|
+
|
|
748
|
+
- role : **Optional[MetaAuthorizationBaseModel]**
|
|
749
|
+
|
|
750
|
+
- user_privileges : **Optional[List[MetaUserPrivilegeModel]]**
|
|
751
|
+
|
|
752
|
+
- `UserPrivilegeCreateModel` :
|
|
753
|
+
|
|
754
|
+
- user_id : **int**
|
|
755
|
+
|
|
756
|
+
- privilege_id : **int**
|
|
757
|
+
|
|
758
|
+
- is_active : **bool**
|
|
759
|
+
|
|
760
|
+
- `UserPrivilegeUpdateModel` :
|
|
761
|
+
|
|
762
|
+
- user_id : **Optional[int]**
|
|
763
|
+
|
|
764
|
+
- privilege_id : **Optional[int]**
|
|
765
|
+
|
|
766
|
+
- is_active : **Optional[bool]**
|
|
767
|
+
|
|
768
|
+
- `UserPrivilegePydanticModel` :
|
|
769
|
+
|
|
770
|
+
- id : **int**
|
|
771
|
+
|
|
772
|
+
- user_id : **int**
|
|
773
|
+
|
|
774
|
+
- privilege_id : **int**
|
|
775
|
+
|
|
776
|
+
- is_active : **bool**
|
|
777
|
+
|
|
778
|
+
- `MetaUserPrivilegeModel` :
|
|
779
|
+
|
|
780
|
+
- privilege_id : **int**
|
|
781
|
+
|
|
782
|
+
- is_active : **bool**
|
|
783
|
+
|
|
784
|
+
- `UserRequestModel` :
|
|
785
|
+
|
|
786
|
+
- username : **Optional[str]**
|
|
787
|
+
|
|
788
|
+
- email : **Optional[str]**
|
|
789
|
+
|
|
790
|
+
- username_or_email : @property **str|None**
|
|
791
|
+
|
|
792
|
+
- `UserLoginRequestModel(UserRequestModel)` :
|
|
793
|
+
|
|
794
|
+
- password : **str**
|
|
795
|
+
|
|
796
|
+
- `UserChangePasswordRequestModel(UserRequestModel)` :
|
|
797
|
+
|
|
798
|
+
- current_password : **str**
|
|
799
|
+
|
|
800
|
+
- new_password : **str**
|
|
801
|
+
|
|
802
|
+
### 2.7. **Module `websocket`**
|
|
803
|
+
|
|
804
|
+
Ce module comporte certaines classes et methodes pour interagir avec des websockets
|
|
805
|
+
|
|
806
|
+
##### 2.7.1. Sous module `connectionManager`
|
|
807
|
+
|
|
808
|
+
Contient la classe ConnectionManager pour gérer une connextion avec un websocket .
|
|
809
|
+
|
|
810
|
+
**methodes**:
|
|
811
|
+
|
|
812
|
+
- **connect** : permet de connecter un websocket au manager
|
|
813
|
+
|
|
814
|
+
- **paramètres:**
|
|
815
|
+
|
|
816
|
+
- websocket : WebSocket
|
|
817
|
+
|
|
818
|
+
- **disconnect** : permet de déconnecter un websocket
|
|
819
|
+
|
|
820
|
+
- **paramètres:**
|
|
821
|
+
|
|
822
|
+
- websocket : WebSocket
|
|
823
|
+
|
|
824
|
+
- **send_message** : permet d'envoyer un message
|
|
825
|
+
|
|
826
|
+
- **paramètres:**
|
|
827
|
+
|
|
828
|
+
- message : **str**
|
|
829
|
+
|
|
830
|
+
### 2.8. **Module `crud`**
|
|
831
|
+
|
|
832
|
+
Ce module comporte des classes methodes et autres utilitaires pour automatiser la création des cruds.
|
|
833
|
+
|
|
834
|
+
##### 2.8.1. Sous module `crud_forgery`
|
|
835
|
+
|
|
836
|
+
Ce sous module comporte la classe CrudForgery pour générer des cruds de base .
|
|
837
|
+
|
|
838
|
+
**`CrudForgery`**:
|
|
839
|
+
|
|
840
|
+
- **`__init__`** :
|
|
841
|
+
|
|
842
|
+
- **paramètres** :
|
|
843
|
+
|
|
844
|
+
- `entity_name`: **str**
|
|
845
|
+
|
|
846
|
+
- `authentication`: **Authentication**
|
|
847
|
+
|
|
848
|
+
- `SQLAlchemyModel` : Le model SQLAlchemy
|
|
849
|
+
|
|
850
|
+
- `CreatePydanticModel` : Le model Pydantic pour la création . **Optional**
|
|
851
|
+
|
|
852
|
+
- `UpdatePydanticModel` : Le model Pydantic pour la mise à jour . **Optional**
|
|
853
|
+
|
|
854
|
+
- `Linked_Classes` : **List[LinkClass]**
|
|
855
|
+
|
|
856
|
+
- **`create`** :
|
|
857
|
+
|
|
858
|
+
- **paramètres** :
|
|
859
|
+
|
|
860
|
+
- `create_ob`: **CreatePydanticModel**
|
|
861
|
+
|
|
862
|
+
- **sortie** : **SQLAlchemyModel**
|
|
863
|
+
|
|
864
|
+
- **`count`** :
|
|
865
|
+
|
|
866
|
+
- **sortie** : **int**
|
|
867
|
+
|
|
868
|
+
- **`read_all`** :
|
|
869
|
+
|
|
870
|
+
- **paramètres** :
|
|
871
|
+
|
|
872
|
+
- `skip`: **Optional[int]**
|
|
873
|
+
|
|
874
|
+
- `limit`: **Optional[int]**
|
|
875
|
+
|
|
876
|
+
- **sortie** : **List[SQLAlchemyModel]**
|
|
877
|
+
|
|
878
|
+
- **`read_all_by_filter`** :
|
|
879
|
+
|
|
880
|
+
- **paramètres** :
|
|
881
|
+
|
|
882
|
+
- `filter`: **str**
|
|
883
|
+
|
|
884
|
+
- `value`: **str**
|
|
885
|
+
|
|
886
|
+
- `skip`: **Optional[int]**
|
|
887
|
+
|
|
888
|
+
- `limit`: **Optional[int]**
|
|
889
|
+
|
|
890
|
+
- **sortie** : **List[SQLAlchemyModel]**
|
|
891
|
+
|
|
892
|
+
- **`read_one`** :
|
|
893
|
+
|
|
894
|
+
- **paramètres** :
|
|
895
|
+
|
|
896
|
+
- `id`: **int**
|
|
897
|
+
|
|
898
|
+
- `db`: **Optional[Session]** : pour utiliser la même session lors de update et delete .
|
|
899
|
+
|
|
900
|
+
- **sortie** : **SQLAlchemyModel**
|
|
901
|
+
|
|
902
|
+
- **`update`** :
|
|
903
|
+
|
|
904
|
+
- **paramètres** :
|
|
905
|
+
|
|
906
|
+
- `id`: **int**
|
|
907
|
+
|
|
908
|
+
- `update_obj`: **UpdatePydanticModel**
|
|
909
|
+
|
|
910
|
+
- **sortie** : **SQLAlchemyModel**
|
|
911
|
+
|
|
912
|
+
- **`delete`** :
|
|
913
|
+
|
|
914
|
+
- **paramètres** :
|
|
915
|
+
|
|
916
|
+
- `id`: **int**
|
|
917
|
+
|
|
918
|
+
- **sortie** : **Reponse avec status code 204**
|
|
919
|
+
|
|
920
|
+
##### 2.8.2 Sous module `user_crud_forgery`
|
|
921
|
+
|
|
922
|
+
Ce sous module définit une classe UserCrudForgery hérité de CrudForgery pour offire un crud personnalisé pour l'utilisateur .
|
|
923
|
+
|
|
924
|
+
**Méthodes** :
|
|
925
|
+
|
|
926
|
+
- `__init__`
|
|
927
|
+
|
|
928
|
+
- **paramètres** :
|
|
929
|
+
|
|
930
|
+
- authentication : Authentication
|
|
931
|
+
|
|
932
|
+
- `change_password` : méthode pour changer le mot de passe d'un utilisateur
|
|
933
|
+
|
|
934
|
+
- **paramètres** :
|
|
935
|
+
|
|
936
|
+
- username_or_email : **str**
|
|
937
|
+
|
|
938
|
+
- current_password : **str**
|
|
939
|
+
|
|
940
|
+
- new_passowrd : **str**
|
|
941
|
+
|
|
942
|
+
- **sortie** : **Reponse avec status code 204**
|
|
943
|
+
|
|
944
|
+
- `is_unique` : méthode pour vérifier si l'email ou le username est unique .
|
|
945
|
+
|
|
946
|
+
- **paramètres** :
|
|
947
|
+
|
|
948
|
+
- sub : **str**
|
|
949
|
+
|
|
950
|
+
- **sortie** : **bool**
|
|
951
|
+
|
|
952
|
+
- `read_one` : méthode lire un utilisateur à partir de son id , son email ou de son username .
|
|
953
|
+
|
|
954
|
+
- **paramètres** :
|
|
955
|
+
|
|
956
|
+
- credential : **str|int**
|
|
957
|
+
- db : Optional[Session] = None
|
|
958
|
+
|
|
959
|
+
- **sortie** : **bool**
|
|
960
|
+
|
|
961
|
+
##### 2.8.3. `Sous module link_class`
|
|
962
|
+
|
|
963
|
+
Ce sous module définit une classe LinkClass
|
|
964
|
+
pour définir un attribut et un model à lié pour la creation d'une entité
|
|
965
|
+
|
|
966
|
+
- `LinkClass`
|
|
967
|
+
|
|
968
|
+
- `__init__` :
|
|
969
|
+
|
|
970
|
+
- **paramètres** :
|
|
971
|
+
|
|
972
|
+
- key : **str**
|
|
973
|
+
|
|
974
|
+
- Model : **type**
|
|
975
|
+
|
|
976
|
+
- `manage_linked_classes` : retourne un dictionnaire en créant les objets liés et en les ajoutant au modèle principal.
|
|
977
|
+
|
|
978
|
+
- **paramètres** :
|
|
979
|
+
|
|
980
|
+
- Linked_Classes : **List[LinkClass]**
|
|
981
|
+
|
|
982
|
+
- dict_obj : **dict**
|
|
983
|
+
|
|
984
|
+
- **sortie** : **dict**
|
|
985
|
+
|
|
986
|
+
### 2.9. **Module `router`**
|
|
987
|
+
|
|
988
|
+
Ce module comporte des classes methodes et autres utilitaires pour automatiser la création des router.
|
|
989
|
+
|
|
990
|
+
##### 2.9.1. Sous module `route_config`
|
|
991
|
+
|
|
992
|
+
Ce sous module comporte la classe `RouteConfig` pour configurer un CustomRouterProvider et une classe utilitaire `DEFAULT_ROUTE_CONFIG`.
|
|
993
|
+
|
|
994
|
+
- `DEFAULT_ROUTE_CONFIG`
|
|
995
|
+
|
|
996
|
+
- `__init__` :
|
|
997
|
+
|
|
998
|
+
- **paramètres**
|
|
999
|
+
|
|
1000
|
+
- summary : **str**
|
|
1001
|
+
|
|
1002
|
+
- description : **str**
|
|
1003
|
+
|
|
1004
|
+
- `RouteConfig`
|
|
1005
|
+
|
|
1006
|
+
- `__init__` :
|
|
1007
|
+
|
|
1008
|
+
- **paramètres**:
|
|
1009
|
+
|
|
1010
|
+
- `route_name`: **str**
|
|
1011
|
+
|
|
1012
|
+
- `route_path`: **Optional[str]**
|
|
1013
|
+
|
|
1014
|
+
- `summary`: **Optional[str]**
|
|
1015
|
+
|
|
1016
|
+
- `description`: **Optional[str]**
|
|
1017
|
+
|
|
1018
|
+
- `is_activated`: **bool** , default : `False`
|
|
1019
|
+
|
|
1020
|
+
- `is_protected`: **bool** , default : `False`
|
|
1021
|
+
|
|
1022
|
+
- `is_unlocked`: **Optional[bool]** , default : `False`
|
|
1023
|
+
|
|
1024
|
+
- roles : **Optional[List[str]]**
|
|
1025
|
+
|
|
1026
|
+
- privileges : **Optional[List[str]]**
|
|
1027
|
+
|
|
1028
|
+
- `get_authorization` : retourne une liste de callable utilisable comme dépendance pour l'authorization
|
|
1029
|
+
|
|
1030
|
+
- **paramètres** :
|
|
1031
|
+
|
|
1032
|
+
- authentication : **Authentication**
|
|
1033
|
+
|
|
1034
|
+
- **sortie** : **List[callable]**
|
|
1035
|
+
|
|
1036
|
+
##### 2.9.2 Sous module `route_namespace`
|
|
1037
|
+
|
|
1038
|
+
Ce sous module comporte des Constantes et classes réutilisables dans le contexte du routage .
|
|
1039
|
+
|
|
1040
|
+
- `class TypeRoute ` : **(str,Enum)** , définit les types de routes
|
|
1041
|
+
|
|
1042
|
+
- `DEFAULT_ROUTES_CONFIGS` : **dict[DefaultRoutesName,DEFAULT,ROUTE_CONFIG]** , contient une configuration de base pour définir les routes par défaut .
|
|
1043
|
+
|
|
1044
|
+
- `ROUTES_PUBLIC_CONFIG` : **List[RouteConfig]** ,contient une liste de RouteConfig pour les routes par défaut publics ou non protégés .
|
|
1045
|
+
|
|
1046
|
+
- `ROUTES_PROTECTED_CONFIG` : **List[RouteConfig]** , contient une liste de RouteConfig pour les routes par défaut protégés .
|
|
1047
|
+
|
|
1048
|
+
- **`USER_AUTH_CONFIG` : dict[DefaultRoutesName,RouteConfig]** , contient un dictionnaire de nom de route et de RouteConfig pour les routes par défaut liés à l'authentification d'un utilisateur .
|
|
1049
|
+
|
|
1050
|
+
- **`USER_AUTH_CONFIG_ROUTES` : List[RouteConfig]** , contient toutes les RouteConfig définit par
|
|
1051
|
+
|
|
1052
|
+
##### 2.9.3. Sous module `router_default_routes_name`
|
|
1053
|
+
|
|
1054
|
+
Ce sous module définit notament des classes contenant les définitions des noms des routes
|
|
1055
|
+
|
|
1056
|
+
- `DefaultRoutesName` : **(str,Enum)** , contient les définitions des noms des routes définies par le routage .
|
|
1057
|
+
|
|
1058
|
+
- `DEFAULT_DETAIL_ROUTES_NAME` : **list** , définit les routes de detail
|
|
1059
|
+
|
|
1060
|
+
##### 2.9.4. Sous module `route_provider`
|
|
1061
|
+
|
|
1062
|
+
Ce sous module comporte la classe CustomRouterProvider pour configurer un CustomRouterProvider .
|
|
1063
|
+
`CustomRouterProvider`
|
|
1064
|
+
|
|
1065
|
+
**`Attributs de classe`**
|
|
1066
|
+
|
|
1067
|
+
- `__init__` :
|
|
1068
|
+
|
|
1069
|
+
- **paramètres**:
|
|
1070
|
+
|
|
1071
|
+
- `prefix`: **str**
|
|
1072
|
+
|
|
1073
|
+
- `tags`: **List[str]**
|
|
1074
|
+
|
|
1075
|
+
- `PydanticModel`: **type** , Model de reponse Pydantic
|
|
1076
|
+
|
|
1077
|
+
- `crud` : **CrudForgery**
|
|
1078
|
+
|
|
1079
|
+
- `roles` : **Optional[List[str]]**
|
|
1080
|
+
|
|
1081
|
+
- `privileges `: **Optional[List[str]]**
|
|
1082
|
+
|
|
1083
|
+
- `utilisation` :
|
|
1084
|
+
|
|
1085
|
+
```python
|
|
1086
|
+
router_provider = CustomRouterProvider(
|
|
1087
|
+
prefix="/items",
|
|
1088
|
+
tags=["item"],
|
|
1089
|
+
PydanticModel=model.PydanticModel,
|
|
1090
|
+
crud=myapp_crud,
|
|
1091
|
+
)
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
- **`get_public_router`** : renvoie un router avec la configuration de `ROUTES_PUBLIC_CONFIG`
|
|
1095
|
+
|
|
1096
|
+
- **paramètres**:
|
|
1097
|
+
|
|
1098
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1099
|
+
|
|
1100
|
+
- **`get_protected_router`** : renvoie un router avec la configuration de `ROUTES_PROTECTED_AUTH_CONFIG`
|
|
1101
|
+
|
|
1102
|
+
- **paramètres**:
|
|
1103
|
+
|
|
1104
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1105
|
+
|
|
1106
|
+
- **`get_mixed_router`** : renvoie un router avec une configuration personnalisée entre routes publics et protégés .
|
|
1107
|
+
|
|
1108
|
+
- **paramètres**:
|
|
1109
|
+
|
|
1110
|
+
- `init_data`: **List[RouteConfig]**
|
|
1111
|
+
|
|
1112
|
+
- public_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1113
|
+
|
|
1114
|
+
- protected_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1115
|
+
|
|
1116
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1117
|
+
|
|
1118
|
+
- **`initialize_router`** : renvoie un router avec une configuration personnalisée .
|
|
1119
|
+
|
|
1120
|
+
- **paramètres**:
|
|
1121
|
+
|
|
1122
|
+
- `init_data`: **List[RouteConfig]**
|
|
1123
|
+
|
|
1124
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1125
|
+
|
|
1126
|
+
- `utilisation` :
|
|
1127
|
+
|
|
1128
|
+
```python
|
|
1129
|
+
init_data: List[RouteConfig] = [
|
|
1130
|
+
RouteConfig(route_name="create", is_activated=True),
|
|
1131
|
+
RouteConfig(route_name="read-one", is_activated=True),
|
|
1132
|
+
RouteConfig(route_name="update", is_activated=True, is_protected=True),
|
|
1133
|
+
RouteConfig(route_name="delete", is_activated=True, is_protected=True),
|
|
1134
|
+
]
|
|
1135
|
+
app_myapp = router_provider.initialize_router(init_data=init_data)
|
|
1136
|
+
```
|
|
1137
|
+
|
|
1138
|
+
##### 2.9.5. Sous module `router_crud`
|
|
1139
|
+
|
|
1140
|
+
Ce sous module comporte certaines fonctions utilisées dans le cadre du routage .
|
|
1141
|
+
|
|
1142
|
+
- `exclude_route` : permet d'exclure des routes d'une liste de routes
|
|
1143
|
+
|
|
1144
|
+
- **paramètres:**
|
|
1145
|
+
|
|
1146
|
+
- routes : **List[RouteConfig]**
|
|
1147
|
+
|
|
1148
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1149
|
+
|
|
1150
|
+
- **sortie** : **List[RouteConfig]**
|
|
1151
|
+
|
|
1152
|
+
- `get_single_route` : permet d'avoir une configuration par défaut d'une route particulière .
|
|
1153
|
+
|
|
1154
|
+
- **paramètres:**
|
|
1155
|
+
|
|
1156
|
+
- route_name : **DefaultRoutesName**
|
|
1157
|
+
|
|
1158
|
+
- type_route : **Optional[TypeRoute]= TypeRoute.PROTECTED**
|
|
1159
|
+
|
|
1160
|
+
- exclude_routes_name : **Optional[List[DefaultRoutesName]]**
|
|
1161
|
+
|
|
1162
|
+
- **sortie** : **RouteConfig**
|
|
1163
|
+
|
|
1164
|
+
- `initialize_dependencies` : permet d'initialiser les dépendances à passer à une route .
|
|
1165
|
+
|
|
1166
|
+
- **paramètres:**
|
|
1167
|
+
|
|
1168
|
+
- config : **RouteConfig**
|
|
1169
|
+
|
|
1170
|
+
- authentication : **Authentication**
|
|
1171
|
+
|
|
1172
|
+
- roles : **Optional[List[str]]**
|
|
1173
|
+
|
|
1174
|
+
- privileges : **Optional[List[str]]**
|
|
1175
|
+
|
|
1176
|
+
- **sortie** : **List[Depends]**
|
|
1177
|
+
|
|
1178
|
+
##### 2.9.6. Sous module `user_router_provider`
|
|
1179
|
+
|
|
1180
|
+
ce sous module continent UserRouterProvider qui hérite de CustomRouterProvider , personnalisé pour l'utilisateur .
|
|
1181
|
+
|
|
1182
|
+
- `__init__` :
|
|
1183
|
+
|
|
1184
|
+
- **paramètres** :
|
|
1185
|
+
|
|
1186
|
+
- crud: **UserCrudForgery**
|
|
1187
|
+
|
|
1188
|
+
- prefix : **str**
|
|
1189
|
+
|
|
1190
|
+
- tags : **List[str]**
|
|
1191
|
+
|
|
1192
|
+
- roles : List[str] = []
|
|
1193
|
+
|
|
1194
|
+
- privileges : List[str] = []
|
|
1195
|
+
|
|
1196
|
+
# IV - **`Contact ou Support`**
|
|
1197
|
+
|
|
1198
|
+
Pour des questions ou du support, contactez-moi à maximeatsoudegbovi@gmail.com ou au (+228) 91 36 10 29.
|