5.5 KiB
5.5 KiB
Objectifs
- Créer un script qui permet de récupérer tous les utilisateurs de la plateforme Ziwig Connect avec le détail de l'utilisateur ainsi que celui du Professionnel qui lui est associé
- Le microservice à Utiliser pour les données utilisateur est IAM
- Le microservice à utiliser pour les données du professionnel est HRD
Environnement de Développement
- Python 3.12
- Un seul module
Template
- Utiliser le template à partir de EB_Script_Template et bien lire la documentation qui s'y trouve
Logique du Script
Le script s'exécute en deux phases principales séquentielles :
Phase 1 : Traitement par Rôles
- Récupérer tous les Rôles de l'IAM (Limit 100, pas de pagination nécessaire).
- Initialiser un dictionnaire
outputpar rôles :- La réponse contient une liste de rôles, chacun avec un tableau d'utilisateurs.
- Pour chaque utilisateur trouvé, créer ou mettre à jour une entrée :
user_id: {roles: [{id, name}], user: {}, professional: {}}.
- Lancer le traitement multithreadé (voir section Multithreading) sur ces utilisateurs.
- Sauvegarder le résultat dans
all_users_data.json.
Phase 2 : Traitement par Applications
- Récupérer la liste des applications via
get_applications. - Pour chaque application trouvée :
- Afficher une séparation claire dans la console.
- Récupérer les profils associés via
get_profiles_by_app_id(avecclientId). - Initialiser un nouveau dictionnaire
outputpour cette application :- Pour chaque profil, récupérer les utilisateurs via
get_users_by_profile_id. - Pour chaque utilisateur trouvé, créer ou mettre à jour une entrée :
user_id: {profiles: [{id, name}], user: {}, professional: {}}. - (Note : La clé est
profilesici, au lieu deroles).
- Pour chaque profil, récupérer les utilisateurs via
- Lancer le même traitement multithreadé sur ces utilisateurs.
- Sauvegarder le résultat dans un fichier spécifique :
all_users_data_{app_name}.json.
Phase 3 : Traitement par Centres Endobest
- Configuration :
- Fichier input :
endobest_organizations.json(Constante). - Fichier output :
professionals_by_endobest_center.json(Constante).
- Fichier input :
- Logique :
- Charger la liste des organisations depuis le fichier JSON input (champs requis:
id,name,Center_Name). - Initialiser une barre de progression basée sur le nombre de centres.
- Itération (Séquentielle, pas de thread pool) :
- Pour chaque centre :
- Appeler l'API
get_pros_by_endobest_center. - Récupérer le tableau de professionnels depuis l'attribut
data. - Tri des Pros : Trier par
properties.nom_exercice, puisproperties.prenom_exercice, puismetadata.id. - Ajouter ce tableau trié au centre en cours sous l'attribut
pros.
- Appeler l'API
- Pour chaque centre :
- Tri des Centres : Trier la liste finale des centres par
Center_Name, puisname, puisid. - Sauvegarder la liste triée dans le fichier output.
- Charger la liste des organisations depuis le fichier JSON input (champs requis:
Format de l'Output
- Fichiers générés :
all_users_data.json(Données issues des Rôles).all_users_data_{app_name}.json(Un fichier par Application).professionals_by_endobest_center.json(Données issues des Centres Endobest).
- Structure JSON :
- Array d'objets triés (par
lastname,firstname,user_id). - Chaque objet contient :
user_iduser(Détails IAM)professional(Détails HRD)roles(Uniquement pour le fichier par Rôles)profiles(Uniquement pour les fichiers par Applications)
- Array d'objets triés (par
Specs des APIs
- Authentication (IAM):
/api/auth/{REALME}/login[POST]/api/auth/refreshToken[POST]
- Common (All Microservices):
/api/auth/config-token[POST]/api/auth/refreshToken[POST]
- IAM (User Data):
get_roles:/api/profiles/paginate[POST]get_applications:/api/applications[GET]get_profiles_by_app_id:/api/identity-profiles/paginate[POST]get_users_by_profile_id:/api/identity-profiles/{profile_id}/users[GET]get_user_by_id:/api/users/find/{user_id}[GET]
- HRD (Professional Data):
get_professional_by_id:/api/entity-manager/meta/{model}/data/nodes/pro/{pro_id}?relationships=2[GET]get_pros_by_endobest_center:/api/entity-manager/meta/modele_fr/data/orga/{organization_id}/centers/pros?limit=1000[GET]
- Note :
user_id,model, etprofessional_idsont récupérés de la même manière pour tous les traitements.
Multithreading
- Input utilisateur pour le nombre de threads (global).
- Le script utilise deux pools de threads persistants (
mainetsubtasks) réutilisés pour chaque phase (Rôles, App 1, App 2...). - Traitement Utilisateur (Main Pool) :
- Récupère
get_user_by_id. - Stocke dans
user. - Si
hrdProIdexiste : soumet une tâche "Professionnel". - Sinon : incrémente la barre de progression "Professionals" (pour ne pas bloquer).
- Récupère
- Traitement Professionnel (Subtasks Pool) :
- Récupère
get_professional_by_id. - Stocke dans
professional. - Incrémente la barre de progression "Professionals".
- Récupère
Progression du Script
- Utilisation de
tqdmpour afficher deux barres (Users et Professionals). - Les barres sont créées, mises à jour, et fermées indépendamment pour chaque fichier généré (Rôles, puis chaque Application).
- Gestion thread-safe des mises à jour.