Development #33672
avoir un export/import du paramétrage
0%
Description
La définition du profil et les variables (sans doute en ne s'attardant pas sur celles attachées à des services particuliers, qui est un truc que je dégagerais volontiers).
Fichiers
Révisions associées
environment: add missing template (#33672)
Historique
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Frédéric Péters a écrit :
La définition du profil et les variables (sans doute en ne s'attardant pas sur celles attachées à des services particuliers, qui est un truc que je dégagerais volontiers).
Euh c'est quand même utile pour les SETTING_TRUCMUCHE (même si ça n'est pas exposé directement on n'a pas forcément envie que ça se retrouve dans les settings de toute le monde...).
Mis à jour par Frédéric Péters il y a presque 5 ans
(ce ticket n'est pas l'espace pour cette discussion).
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a presque 4 ans
- Fichier 0001-environment-import-and-export-parameters-33672.patch 0001-environment-import-and-export-parameters-33672.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 3 ans
Je suis un peu embêté par l'import qui fait un brutal :
Variable.objects.filter(service_pk__isnull=True).delete() AttributeDefinition.objects.all().delete()
Il faudrait je pense être un peu plus doux, ie faire des upsert et ne rien effacer.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
- Fichier 0001-environment-import-and-export-parameters-33672.patch 0001-environment-import-and-export-parameters-33672.patch ajouté
Remarque prise en compte.
Mis à jour par Frédéric Péters il y a plus de 3 ans
url(r'^import/$', views.ImportView.as_view(), name='environment-import'), url(r'^export$', views.ExportView.as_view(), name='environment-export'),
il faudrait un / final des deux côtés.
obj, created = Variable.objects.get_or_create(name=variable['name']) objects.append(Variable(id=obj.id, **variable))
Ça m'a quand même l'air un gros danger de perte de données cette manière de recréer un objet en lui forçant l'id (genre des attributs qui ne se trouvent pas dans l'export, comme le service associé). Quand il existe il faut plutôt modifier l'objet. (pareil pour les attributs du profil)
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
- Fichier 0001-environment-import-and-export-parameters-33672.patch 0001-environment-import-and-export-parameters-33672.patch ajouté
Ok, désolé d'avoir continué dans la même voie (remarques prises en compte).
Mis à jour par Frédéric Péters il y a plus de 3 ans
Je comprends la création de la liste objects comme une tentative de gérer une transaction, ne pas enregistrer au cas où il y aurait une erreur, ça n'est pas comme ça qu'il faut faire, il faut :
try: with transaction.atomic(): ... obj.save() except...
Après, je ne gérerais même pas d'exception ici parce qu'il ne doit pas s'en passer. Et s'il s'en passe une je préfère qu'on soit notifié plutôt que peut-être avoir un ticket incomplet.
+ obj, created = AttributeDefinition.objects.get_or_create( + label=fields['label'], name=fields['name'])
Ça suppose une unicité sur le libellé et non il faut juste le name ici.
+ if key == 'label' or key == 'name': + continue
et pareil dans la boucle précédente, ça sert à rien tu peux juste réassigner les attributs label et name sans soucis et gagner ces lignes.
+ def get(self, request, *args, **kwargs): + response = HttpResponse(content_type='application/json')
pour sortir du json il y a désormais dans django JsonResponse.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
- Fichier 0001-environment-import-and-export-parameters-33672.patch 0001-environment-import-and-export-parameters-33672.patch ajouté
Merci de m'avoir encore guidé. J'ai donc pris en compte les remarques, sauf une car j'ai l'impression qu'il y a bien une unicité sur le libellé des attributs : (hobo/profile/models.py)
class AttributeDefinition(models.Model): label = models.CharField(verbose_name=_('label'), max_length=63, unique=True)
Par exemple :
(Pdb) AttributeDefinition.objects.create(name='name1', label='label1').save() (Pdb) AttributeDefinition.objects.create(name='name2', label='label1').save() *** django.db.utils.IntegrityError: ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « profile_attributedefinition_label_key » DETAIL: La clé « (label)=(label1) » existe déjà.
Mis à jour par Frédéric Péters il y a plus de 3 ans
Merci de m'avoir encore guidé. J'ai donc pris en compte les remarques, sauf une car j'ai l'impression qu'il y a bien une unicité sur le libellé des attributs : (hobo/profile/models.py)
Mais si tu es en recette et que tu modifies le libellé du champ "Nom", pour par exemple écrire "Nom de naissance", puis que tu importes ces paramètrages en production, tu as envie que ce soit le champ qui a l'attribut last_name qui change de libellé, plutôt que le crash que tu proposes.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
- Fichier 0001-environment-import-and-export-parameters-33672.patch 0001-environment-import-and-export-parameters-33672.patch ajouté
Oui, en effet (j'ai complété les tests pour qu'ils comprennent ce scénario).
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Validé mais ça m'irait d'y avoir
- response = JsonResponse(utils.export_parameters()) + response = JsonResponse(utils.export_parameters(), json_dumps_params={'indent': 2})
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
Oui, ça fait moins désordre.
commit 1fe9521fe12d0f13970e501c0ab1f961d2d3e267 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Tue May 12 10:28:54 2020 +0200 environment: import and export parameters (#33672)
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
Repoussé, parce que absent de master (j'ai dû oublier le push ou autre chose ?)
commit 60e5bd28d0daa151c4a51f4cdd1c5127ac9602e8 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Oct 14 17:13:52 2020 +0200 environment: import and export parameters (#33672)
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 3 ans
(décidément, j'ai oublié un template)
commit 572a9f9acbd920fc9635972dd83027e18fda3cc3 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Oct 14 17:34:53 2020 +0200 environment: add missing template (#33672)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
environment: import and export parameters (#33672)