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.
Files changed (69) hide show
  1. elrahapi-1.0.0/PKG-INFO +1198 -0
  2. elrahapi-1.0.0/README.md +1181 -0
  3. elrahapi-1.0.0/elrahapi/__init__.py +0 -0
  4. elrahapi-1.0.0/elrahapi/__main__.py +189 -0
  5. elrahapi-1.0.0/elrahapi/authentication/__init__.py +0 -0
  6. elrahapi-1.0.0/elrahapi/authentication/authenticate.py +214 -0
  7. elrahapi-1.0.0/elrahapi/authentication/token.py +16 -0
  8. elrahapi-1.0.0/elrahapi/authorization/__init__.py +0 -0
  9. elrahapi-1.0.0/elrahapi/authorization/meta_model.py +32 -0
  10. elrahapi-1.0.0/elrahapi/authorization/privilege_model.py +39 -0
  11. elrahapi-1.0.0/elrahapi/authorization/role_model.py +34 -0
  12. elrahapi-1.0.0/elrahapi/authorization/role_privilege_model.py +28 -0
  13. elrahapi-1.0.0/elrahapi/crud/__init__.py +0 -0
  14. elrahapi-1.0.0/elrahapi/crud/crud_forgery.py +155 -0
  15. elrahapi-1.0.0/elrahapi/crud/link_class.py +22 -0
  16. elrahapi-1.0.0/elrahapi/crud/user_crud_forgery.py +73 -0
  17. elrahapi-1.0.0/elrahapi/exception/__init__.py +0 -0
  18. elrahapi-1.0.0/elrahapi/exception/auth_exception.py +21 -0
  19. elrahapi-1.0.0/elrahapi/exception/custom_http_exception.py +6 -0
  20. elrahapi-1.0.0/elrahapi/exception/exceptions_utils.py +6 -0
  21. elrahapi-1.0.0/elrahapi/middleware/__init__.py +0 -0
  22. elrahapi-1.0.0/elrahapi/middleware/crud_middleware.py +79 -0
  23. elrahapi-1.0.0/elrahapi/middleware/error_middleware.py +75 -0
  24. elrahapi-1.0.0/elrahapi/middleware/log_middleware.py +19 -0
  25. elrahapi-1.0.0/elrahapi/middleware/loggerapp/__init__.py +0 -0
  26. elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_crud.py +9 -0
  27. elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_model.py +6 -0
  28. elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_router.py +14 -0
  29. elrahapi-1.0.0/elrahapi/middleware/loggerapp/log_schema.py +7 -0
  30. elrahapi-1.0.0/elrahapi/middleware/models.py +37 -0
  31. elrahapi-1.0.0/elrahapi/router/__init__.py +0 -0
  32. elrahapi-1.0.0/elrahapi/router/route_config.py +65 -0
  33. elrahapi-1.0.0/elrahapi/router/router_crud.py +67 -0
  34. elrahapi-1.0.0/elrahapi/router/router_default_routes_name.py +24 -0
  35. elrahapi-1.0.0/elrahapi/router/router_namespace.py +112 -0
  36. elrahapi-1.0.0/elrahapi/router/router_provider.py +220 -0
  37. elrahapi-1.0.0/elrahapi/router/user_router_provider.py +200 -0
  38. elrahapi-1.0.0/elrahapi/security/__init__.py +0 -0
  39. elrahapi-1.0.0/elrahapi/security/secret.py +0 -0
  40. elrahapi-1.0.0/elrahapi/settings/__init__.py +0 -0
  41. elrahapi-1.0.0/elrahapi/settings/database.py +17 -0
  42. elrahapi-1.0.0/elrahapi/settings/models_metadata.py +10 -0
  43. elrahapi-1.0.0/elrahapi/settings/secret.py +19 -0
  44. elrahapi-1.0.0/elrahapi/sqlapp/__init__.py +0 -0
  45. elrahapi-1.0.0/elrahapi/sqlapp/cruds.py +12 -0
  46. elrahapi-1.0.0/elrahapi/sqlapp/models.py +21 -0
  47. elrahapi-1.0.0/elrahapi/sqlapp/router.py +24 -0
  48. elrahapi-1.0.0/elrahapi/sqlapp/schemas.py +18 -0
  49. elrahapi-1.0.0/elrahapi/sqlapp/utils.py +0 -0
  50. elrahapi-1.0.0/elrahapi/user/__init__.py +0 -0
  51. elrahapi-1.0.0/elrahapi/user/models.py +161 -0
  52. elrahapi-1.0.0/elrahapi/user/userapp/__init__.py +0 -0
  53. elrahapi-1.0.0/elrahapi/user/userapp/user_cruds.py +54 -0
  54. elrahapi-1.0.0/elrahapi/user/userapp/user_models.py +47 -0
  55. elrahapi-1.0.0/elrahapi/user/userapp/user_router_providers.py +51 -0
  56. elrahapi-1.0.0/elrahapi/user/userapp/user_routers.py +24 -0
  57. elrahapi-1.0.0/elrahapi/user/userapp/user_schemas.py +21 -0
  58. elrahapi-1.0.0/elrahapi/utility/__init__.py +0 -0
  59. elrahapi-1.0.0/elrahapi/utility/utils.py +27 -0
  60. elrahapi-1.0.0/elrahapi/websocket/__init__.py +0 -0
  61. elrahapi-1.0.0/elrahapi/websocket/connectionManager.py +20 -0
  62. elrahapi-1.0.0/elrahapi.egg-info/PKG-INFO +1198 -0
  63. elrahapi-1.0.0/elrahapi.egg-info/SOURCES.txt +67 -0
  64. elrahapi-1.0.0/elrahapi.egg-info/dependency_links.txt +1 -0
  65. elrahapi-1.0.0/elrahapi.egg-info/entry_points.txt +2 -0
  66. elrahapi-1.0.0/elrahapi.egg-info/requires.txt +4 -0
  67. elrahapi-1.0.0/elrahapi.egg-info/top_level.txt +1 -0
  68. elrahapi-1.0.0/setup.cfg +4 -0
  69. elrahapi-1.0.0/setup.py +24 -0
@@ -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.