Projet

Général

Profil

Development #24921

interface de création de rôles en masse via un CSV

Ajouté par Frédéric Péters il y a presque 6 ans. Mis à jour il y a environ 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
02 juillet 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

L'export/import de rôles fonctionne bien entre authentic mais pour l'alimentation initiale ça serait pratique d'avoir la possibilité d'envoyer un simple CSV; depuis la page des rôles d'une OU, une action "Importer", qui ouvrirait une boite de ce genre :

Import des rôles

Fichier
 [ Parcourir...]
 Fichier CSV avec comme colonne le nom du rôle, le slug (optionnel),
 l'email associé (optionnel), etc.
 <Télécharger un fichier d'exemple>

                                                 [Annuler] [Importer]

Fichiers


Demandes liées

Lié à Authentic 2 - Development #29162: Export des rôlesFermé18 décembre 2018

Actions

Révisions associées

Révision 36fd7c65 (diff)
Ajouté par Valentin Deniaud il y a environ 3 ans

manager: import roles using CSV (#24921)

Historique

#2

Mis à jour par Marie Kuntz -> retour le 13 mai il y a plus de 5 ans

#3

Mis à jour par Valentin Deniaud il y a environ 3 ans

  • Planning mis à Non

Ce ticket traîne sur le pad « eo-fred-tickets » depuis toujours. Il est plus relou qu'il n'y paraît parce que le modèle Role est défini dans hobo, ça nécessite donc d'y définir là-bas un formulaire d'import, d'avoir un setting A2_MANAGER_ROLE_CSV_IMPORT_FORM_CLASS...

Mais pour couvrir les quelques cas d'usages que j'ai vu passer il y a vraiment juste besoin du nom/slug du rôle, est-ce qu'une version minimaliste qui permettre juste ça ne serait pas suffisante ? Alternativement, créer automatiquement les rôles manquants au moment de l'import CSV des utilisateurs...

#4

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Le modèle concernant les attributs des rôles est lui bien dans authentic, je pense qu'il serait temps que ça revienne entièrement dans authentic et de manière plus propre (à mon avis un stockage json dans le modèle du rôle directement serait plus approprié) mais je n'en ferai pas un pré-requis pour ce ticket.

Ça me va d'avoir un code tout bête dans a2 qui gère de base slug/name/ou__slug/ou__name et d'y aggréger un support ad-hoc de details, emails et emails_to_members quand on détecte que hobo.agent.authentic est chargé. Quand on saura faire plus propre on migrera. Comme pour les imports JSON il faudrait prévoir une affectation par défaut à l'OU par défaut, vraisemblablement avec une checkbox dans le formulaire d'import (ou un sélecteur, [ne rien faire, importer les rôles sans OU dans l'ou par défaut, importer les rôles sans OU dans l'ou XYZ, etc...].

Le fichier CSV minimal contiendrait juste des noms de rôles.

#5

Mis à jour par Valentin Deniaud il y a environ 3 ans

  • Assigné à mis à Valentin Deniaud
#6

Mis à jour par Valentin Deniaud il y a environ 3 ans

Finalement proposition minimale, il y avait déjà pas mal à faire. On peut importer des roles en précisant nom et éventuellement slug et collectivité.

Benjamin Dauvergne a écrit :

Quand on saura faire plus propre on migrera

Je ne me suis pas engagé là dedans, je suis plutôt pour migrer et ensuite étendre ici (et par rapport à ce que tu écris, pourquoi stoker les attributs en json et pas en faire des champs de modèle normaux ? Il faudrait ouvrir un ticket qui en parle).

#7

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

0001: ça fait beaucoup de changements juste pour hériter d'un seul champ, non ?
0002: il faudrait plutôt accumuler les ValidationError dans une liste errors et renvoyer tout ça à la fin, c'est un peu casse pied d'avoir les erreurs au compte-goutte; il faudrait valider que la ligne d'entête matche un modèle name,slug ou name,slug,ou ; la traduction des entête j'ai l'impression que ça complexifie pour rien, je trouve plus utile de valider que les colonnes sont biens celles qu'on attend.
0003: pas besoin si on vire 0001

Valentin Deniaud a écrit :

Je ne me suis pas engagé là dedans, je suis plutôt pour migrer et ensuite étendre ici (et par rapport à ce que tu écris, pourquoi stoker les attributs en json et pas en faire des champs de modèle normaux ? Il faudrait ouvrir un ticket qui en parle).

Le risque c'est que ça casse authentic ailleurs que dans Publik, le json ça laisse un signal que ça ne fait pas vraiment partie du modèle de donnée. Mon objectif c'est de remplacer le formulaires qui est dans hobo et surcharge le formulaire d'authentic par juste un peu de conf spécifique à publik configuration genre.

ROLE_ATTRIBUTES = [
  {
     'name': 'emails',
     'label': 'Courriels',
     'kind': 'emaillist',
  },
  etc...
]

et qu'on retrouve ces attributs dans l'API des rôles; chose qu'on a pas actuellement aussi. Et oui c'est pour un prochain ticket.

#8

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Solution proposée à En cours
#9

Mis à jour par Valentin Deniaud il y a environ 3 ans

Benjamin Dauvergne a écrit :

0001: ça fait beaucoup de changements juste pour hériter d'un seul champ, non ?

C'est pour hériter de RolesImportForm, qui est plus qu'un seul champ, mais ça me pose pas de problème de dupliquer.

0002: il faudrait plutôt accumuler les ValidationError dans une liste errors et renvoyer tout ça à la fin, c'est un peu casse pied d'avoir les erreurs au compte-goutte

OK je vais faire ça.

il faudrait valider que la ligne d'entête matche un modèle name,slug ou name,slug,ou

OK mais pour le moment l'entête est carrément optionnel, je trouvais ça sympa.

la traduction des entête j'ai l'impression que ça complexifie pour rien

Oui ça dans le cadre authentic c'est pas top (j'ai pour l'instant copié le fonctionnement de l'import CSV des évènements dans chrono).

0003: pas besoin si on vire 0001

C'est quand même un bug, mais il aura son ticket du coup.

#10

Mis à jour par Valentin Deniaud il y a environ 3 ans

Revoici, remarques appliquées sauf pour l'entête : des contrôles là dessus auraient du sens surtout pour permettre d'inverser l'ordre des colonnes etc, ce qui ne sera pas le cas ici.

#11

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Valentin Deniaud a écrit :

il faudrait valider que la ligne d'entête matche un modèle name,slug ou name,slug,ou

OK mais pour le moment l'entête est carrément optionnel, je trouvais ça sympa.

C'est casse gueule, en tout cas on ne fait ça ni dans l'import des utilisateurs ni dans celui des fiches coté w.c.s., mais c'est vrai qu'on le fait par défaut dans csvdatasource. À mon avis c'est une mauvaise idée on gagne aucun temps à ne pas avoir d'entête, surtout si on fournit un exemple, et on en gagne quand le fichier est n'importe quoi.

la traduction des entête j'ai l'impression que ça complexifie pour rien

Oui ça dans le cadre authentic c'est pas top (j'ai pour l'instant copié le fonctionnement de l'import CSV des évènements dans chrono).

Hmm je vois encore un nouvel exemple d'import CSV, j'ai raté celui là.

0003: pas besoin si on vire 0001

C'est quand même un bug, mais il aura son ticket du coup.

Ok.

#12

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Valentin Deniaud a écrit :

Revoici, remarques appliquées sauf pour l'entête : des contrôles là dessus auraient du sens surtout pour permettre d'inverser l'ordre des colonnes etc, ce qui ne sera pas le cas ici.

J'insiste pour l'entête, qu'il soit fixe si tu veux :

if row != ['name', 'slug', 'ou'][:len(row)]:
   raise ValidationError(...)

Et aussi je ne comprends pas le .strip('#').

#14

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Solution proposée à Information nécessaire

Valentin Deniaud a écrit :

Voilà.

Tu as rendu la colonne OU obligatoire, c'est voulu ?

#15

Mis à jour par Valentin Deniaud il y a environ 3 ans

Benjamin Dauvergne a écrit :

Tu as rendu la colonne OU obligatoire, c'est voulu ?

Mmmmh je viens de comprendre le [:len(row)] dans ton bout de code plus haut, revoici.

#16

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Solution proposée à Solution validée

Je crois qu'il faudrait qu'on arrête de faire un seul gros test et préférer plein de petits tests, je ne te jette pas la pierre car je suis autant coupable ainsi que beaucoup d'autres, mais ce serait plus lisible et quand un test pète c'est plus facile de trouver directement la raison.

#17

Mis à jour par Valentin Deniaud il y a environ 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 36fd7c65454d760716e7d56d196aa9837ca71af7
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Tue Mar 16 11:17:12 2021 +0100

    manager: import roles using CSV (#24921)
#18

Mis à jour par Frédéric Péters il y a environ 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF