Bug #21198
nanterre: mise à jour des fédérations depuis un export métier
0%
Description
- de choisir une application métier cible et de charger le fichier,
- de contrôler les actions qui seront accomplies: nombre de fédérations à supprimer principalement, nombre de fédérations conservées et nombre de fédérations inconnue (clé métier inconnue du RSU)
- d'exporter un CSV RSUID, NOM, PRÉNOM, CLÉ, ACTION donnant le détail des décomptes affichés
- d'appliquer la suppression des fédérations inconnues
- un écran affichant les imports en cours, un bouton vers un écran permettant d'en créer un nouveau, pour chaque import on peut le supprimer ou l'appliquer,
- stockage du fichier uploadé sur le disque
- création d'un job d'import,
{ 'application': '<id application métier>', 'app_id_csv': '<chemin du fichier CSV>', }
- à l'exécution du job on complète la description des décomptes prévus et d'un nouveau fichier CSV celui des actions à accomplir
- le bouton d'application du fichier importé crée un job d'exécution
{ 'application': '<id application métier>', 'app_id_csv': '<chemin du fichier CSV>', 'import_job_id': '<id du premier job>', }
Fichiers
Révisions associées
zoo_data: ajoute une méthode pour récupérer tous les jobs d'une classe d'action (#21198)
zoo_data: toujours lier une action à son job (#21198)
zoo_data: permettre à une application d'étendre les URLs d'admin des entités (#21198)
zoo_data: ajoute des permissions génériques en vue d'extensions (#21198)
nanterre: BO pour la synchronisation des fédérations métiers (fixes #21198)
nanterre: modification du message du journal lors d'une suppression automatique de fédération (#21198)
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0005-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0005-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
Je vais attacher des captures d'écran.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Patch proposed changé de Non à Oui
Bout manquant parti sur #21278.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Et donc, on a nouvel écran accessible via un nouveau bouton sur la vue des entités, cet écran affiche les derniers imports en cours, l'import se fait en deux temps et démarre par un clic sur le bouton "Nouvel import", ensuite on doit choisir l'application concernée et fournir un CSV.
Cela génère une nouvelle ligne dans le listing permettant de voir un pré-rapport d'import, la vue HTML du pré-rapport ne donne des indications que sur:- les fédération à supprimer (action "DELETE")
- les fédération nouvelles (i.e. des fédération inconnus mais qui semble plus récente que le fichier d'import, donc on n'y touche pas) (action "NEW")
- les fédérations inconnue (les identifiants métiers qu'on ne retrouve pas dans le RSU) (action "UNKNOWN")
Ce pré-rapport est aussi disponible en fichier CSV, mais il est plus complet (on a en plus toutes les fédérations conservées, marquées de l'action "KEEP").
Après validation du rapport on peut passer à l'application de l'import via le bouton "Appliquer", cela donnera lieu à la création d'un deuxième rapport (en effet entre le premier chargement et l'application il peut y avoir des différences, différences qui seront visible en comparant les deux CSV par exemple).
Les fichiers CSV sont triés par les identifiants RSU, sauf pour les fédérations inconnues qui sont listées en fin de fichier.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier liste-des-jobs.png liste-des-jobs.png ajouté
- Fichier nouveau-bouton.png nouveau-bouton.png ajouté
- Fichier nouvel-import.png nouvel-import.png ajouté
- Fichier rapport-avant-import.png rapport-avant-import.png ajouté
- Tracker changé de Development à Bug
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0005-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0005-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
Derniers patchs intégrant la journalisation des suppressions de fédération et
la création d'une transaction, toute modification devant toujours être liée à
une transaction.
L'objet journal contient simplement le dictionnaire suivant:
{ "text" : "Suppression de la fédération <Application>: <Fédération>"}
La transaction contient le dictionnaire suivant:
transaction.content = { 'action': 'synchronize-federation', 'job_id': self.action.job.id, 'app_id': app_id, 'federations_deleted': [[<RSU ID>,<Application_ID>,<Federation]...] }
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
- Fichier 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch ajouté
J'ai ajouté des permissions génériques action1..7 sur le modèle entity qui
serviront de point d'extension pour les permissions.
L'accès aux vues de synchronisation est contrôlé par la permission action1.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
- Fichier 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch ajouté
Ajout d'une méthode ready() sur ZooNanterreAppConfig pour permettre de renommer
l'action 1 sur les entités en "Peut synchroniser les fédérations".
Mis à jour par Thomas Noël il y a plus de 6 ans
0001: zoo_data: ajoute la construction d'un classpath pour une classe et pas seulement une instance (#21198)
def get_classpath(cls, instance):
comme l'instance peut aussi être une classe, on pourrait changer le nom ; ou plutôt simplement mettre un mini commentaire (# instance can be a class ; au niveau duif isinstance
)... ou rien parce que "git blame" expliquera. Au choix.
0002: zoo_data: ajoute une méthode pour récupérer tous les jobs d'une classe d'action (#21198)
- ack
0003: zoo_data: toujours lier une action à son job (#21198)
- faut pas utiliser assert en dehors des tests
- mais ack quand même, je sais ton amour pour les asserts
0004: zoo_data: permettre à une application d'étendre les URLs d'admin des entités (#21198)
- ack
0005: zoo_data: ajoute des permissions génériques en vue d'extensions (#21198)
- petite erreur de copié collé, après action1 tu n'ajoutes que des "Can do action2 on entities"
0006: nanterre: BO pour la synchronisation des fédérations métiers (fixes #21198)
(enfin un vrai patch ☺)
- zoo/zoo_nanterre/synchronize_federations.py: dans SynchronizeFederationsImport::__init__ il y a :
+ self.federations = [] + self.errors = [] + self.actions = []
mais je pense qu'il faut ajouter ça aussi au début de SynchronizeFederationsImport::analyse() ; parce que celle-ci me semble pouvoir avoir lieu plusieurs fois (pourrait, un jour). Et, sans véritable importance cette fois, juste par réciprocité, ajouter dans le init :+ self.keep_count = 0 + self.new_count = 0 + self.delete_count = 0 + self.unknown_count = 0
- dans le apply, quand tu extraies la liste des effacements :
+ for row in self.actions: + entity_id, _, _, _, app_id, federation, action = row + if action != 'DELETE': + continue + deletes[entity_id] = federation
est-ce qu'il ne faudrait pas aussi filtrer uniquement siapp_id == self.action.app_id
?
- si j'ai tout suivi, l'action NEW elle est jamais gérée ?
- dans SynchronizeFederationsAction::do , à mon avis pépin dans le bout ci-dessous, parce que le synchronize_federations_import.errors n'est pas géré par SynchronizeFederationsImport::analyze_and_report (selon ma lecture SynchronizeFederationsImport ne fait juste que self.errors=[] et jamais rien d'autre) :
+ synchronize_federations_import = SynchronizeFederationsImport(self) .... + synchronize_federations_import.analyze_and_report() + if synchronize_federations_import.errors: <-- ça sera toujours [] je crois bien + return Job.STATE_UNRECOVERABLE_ERROR
Job.create(self, do_later=not settings.DEBUG)
va être génant parce qu'en preprod on aDEBUG = True
. Plutôt ungetattr(settings, 'NANTERRE_SYNCHRONIZE_NO_DELAY', False)
ou quelque autre nom plus joli que tu trouverais.
- zoo_nanterre/templates/admin/index.html: sans doute que tu t'embêtes pour rien à faire des {% trans ... %} vu que y'a du français ailleurs
- c'est bien y'a pas d'assert, tu progresses
- zoo_nanterre/synchronize_federations.py: Copyright (C) 2016 alors qu'on est en 2018
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Thomas Noël a écrit :
0001: zoo_data: ajoute la construction d'un classpath pour une classe et pas seulement une instance (#21198)
def get_classpath(cls, instance):
comme l'instance peut aussi être une classe, on pourrait changer le nom ; ou plutôt simplement mettre un mini commentaire (# instance can be a class ; au niveau duif isinstance
)... ou rien parce que "git blame" expliquera. Au choix.0002: zoo_data: ajoute une méthode pour récupérer tous les jobs d'une classe d'action (#21198)
- ack
0003: zoo_data: toujours lier une action à son job (#21198)
- faut pas utiliser assert en dehors des tests
Il faut distinguer l'utilisation d'assert pour de la gestion d'erreur, ça c'est mal et l'utilisation de assert pour du contrôle de pré-/post-condition/invariant i.e. des choses qui ne peuvent jamais arriver sauf erreur de codage. J'utilise assert comme on l'utilise en C (qui a le même comportement, en -O1 les assert sont virés).
- zoo/zoo_nanterre/synchronize_federations.py: dans SynchronizeFederationsImport::__init__ il y a :
[...]
mais je pense qu'il faut ajouter ça aussi au début de SynchronizeFederationsImport::analyse() ; parce que celle-ci me semble pouvoir avoir lieu plusieurs fois (pourrait, un jour). Et, sans véritable importance cette fois, juste par réciprocité, ajouter dans le init :
Oui tu as raison je vais même tout simplement déplacer cela dans analyze().
[...]
- dans le apply, quand tu extraies la liste des effacements :
[...]
est-ce qu'il ne faudrait pas aussi filtrer uniquement siapp_id == self.action.app_id
?
En fait j'utilise la liste actions pour deux choses, générer mes rapports CSV et effectuer réellement la suppression des fédérations, dans ce dernier cas il n'y a que trois colonnes qui servent, rsu_id, federation et action.
- si j'ai tout suivi, l'action NEW elle est jamais gérée ?
Non c'est une valeur qui ne sert qu'au rapport, ça indique une fédération qui est plus récente que l'import (elle est plus grande que la plus grande valeur entière d'une fédération de l'import). L'idée c'est qu'ils ne se prennent pas trop le choux à bloquer toute l'application au moment d'un import parce qu'entre le temps T de l'export et le temps T+1 de son import de nouvelles fédérations auront pu être créé entre zoo et les applications métiers, qui étant absente de l'export seraient considérées comme devant être supprimées; bien sûr cela ne marche que dans la mesure ou les fédérations sont des entiers distribués de manière strictement incrémentale; ce qui semble être le cas (sauf pour saga, mais de notre coté on génère un code saga_tiers incrémental, on partira de ça plutôt).
- dans SynchronizeFederationsAction::do , à mon avis pépin dans le bout ci-dessous, parce que le synchronize_federations_import.errors n'est pas géré par SynchronizeFederationsImport::analyze_and_report (selon ma lecture SynchronizeFederationsImport ne fait juste que self.errors=[] et jamais rien d'autre) :
[...]
Ouais je vais relire ça, en fait y a pas vraiment de cas d'erreur, au début je faisais des pseudos contrôles sur le fichier d'import, mais maintenant je lis juste ligne par ligne et si un truc ne martche pas ça fait juste une fédération inconnue.
Job.create(self, do_later=not settings.DEBUG)
va être génant parce qu'en preprod on aDEBUG = True
. Plutôt ungetattr(settings, 'NANTERRE_SYNCHRONIZE_NO_DELAY', False)
ou quelque autre nom plus joli que tu trouverais.
Ok.
- zoo_nanterre/templates/admin/index.html: sans doute que tu t'embêtes pour rien à faire des {% trans ... %} vu que y'a du français ailleurs
C'est un template copié depuis django/contrib/admin/templates/admin/ donc c'est pas moi, je ne peux rien n'y faire l'admin django ne prévoit pas de moyen propre de surcharger sa page d'accueil, enfin on peut déclarer sa propre classe AdminSite et surcharger le chemin mais j'ai eu la flemme.
- c'est bien y'a pas d'assert, tu progresses
- zoo_nanterre/synchronize_federations.py: Copyright (C) 2016 alors qu'on est en 2018
Yep je corrige.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
- Fichier 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch ajouté
J'ai pris en compte toutes tes remarques, sauf le fait de ne pas utiliser assert, notamment j'en ai ajouté un pour vérifier les app_id (c'est normalement impossible que cela difffére).
J'ai ajouté un test, qui passe :)
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch 0006-nanterre-BO-pour-la-synchronisation-des-f-d-rations-.patch ajouté
- Fichier 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch 0004-zoo_data-permettre-une-application-d-tendre-les-URLs.patch ajouté
- Fichier 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch 0001-zoo_data-ajoute-la-construction-d-un-classpath-pour-.patch ajouté
- Fichier 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch 0003-zoo_data-toujours-lier-une-action-son-job-21198.patch ajouté
- Fichier 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch 0002-zoo_data-ajoute-une-m-thode-pour-r-cup-rer-tous-les-.patch ajouté
- Fichier 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch 0005-zoo_data-ajoute-des-permissions-g-n-riques-en-vue-d-.patch ajouté
Avec le test c'est mieux.
Mis à jour par Thomas Noël il y a plus de 6 ans
Ack
Je peux m'occuper de pousser et envoyer en préprod si tu veux.
Mis à jour par Thomas Noël il y a plus de 6 ans
- Statut changé de Nouveau à Résolu (à déployer)
commit 7fa7a218e7982c4bab05ba0ee4b5705314e8cc9e Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jan 19 15:22:44 2018 +0100 nanterre: BO pour la synchronisation des fédérations métiers (fixes #21198) commit 94055f35a03c6b7ed797f466901225047e9ba36a Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed Jan 24 15:26:38 2018 +0100 zoo_data: ajoute des permissions génériques en vue d'extensions (#21198) commit 9f3e4245622b6f3ea34bcbc5ab3acdaad40924f2 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jan 19 15:20:27 2018 +0100 zoo_data: permettre à une application d'étendre les URLs d'admin des entités (#21198) commit 4cf9a23f5d27d5bb256300a4d68bcfe781d95d49 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jan 19 15:19:51 2018 +0100 zoo_data: toujours lier une action à son job (#21198) commit 2baa23702da0ed0741577c51b80f69bd4fe95797 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jan 19 15:19:34 2018 +0100 zoo_data: ajoute une méthode pour récupérer tous les jobs d'une classe d'action (#21198) commit 72a6dfee6c1a11db59baf58d4da7118da1137856 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jan 19 15:19:01 2018 +0100 zoo_data: ajoute la construction d'un classpath pour une classe et pas seulement une instance (#21198)
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- % réalisé changé de 0 à 100
Appliqué par commit 7fa7a218e7982c4bab05ba0ee4b5705314e8cc9e.
Mis à jour par Thomas Noël il y a plus de 6 ans
- Statut changé de Résolu (à déployer) à Solution déployée
- % réalisé changé de 100 à 0
Installé sur preprod Nanterre.
zoo_data: ajoute la construction d'un classpath pour une classe et pas seulement une instance (#21198)