Projet

Général

Profil

Bug #13792

API : Utiliser les slugs des agendas, plutôt que les id

Ajouté par Frédéric Péters il y a plus de 7 ans. Mis à jour il y a plus de 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
28 octobre 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers

Révisions associées

Révision a233f39d (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

api: update datetimes/fillslot API to get agenda by slug (#13792)

Révision 6e1fb0aa (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

agendas: add slug to MeetingType model (#13792)

Révision c3375443 (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

api: update meeting types API to be based on slugs (#13792)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 7 ans

0002: dans la migration j'ai l'impression que « meeting_type.slug = slugify(meeting_type.label) » est inutile, parce que le meeting_type.save() fera tout le travail (et mieux, en plus).

À part ça, j'aurais aimé des "# legacy access from id" dans le code quand on cherche avec les id et non les slugs.

#3

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Fichier 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch ajouté
  • Fichier 0002-agendas-add-slug-to-MeetingType-model-13792.patch ajouté
  • Fichier 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch ajouté

Thomas Noël a écrit :

0002: dans la migration j'ai l'impression que « meeting_type.slug = slugify(meeting_type.label) » est inutile, parce que le meeting_type.save() fera tout le travail (et mieux, en plus).

C'était mon intention mais ça ne fonctionne pas, parce que la classe MeetingType qu'on récupère là est juste un wrapper créé par le processus de migration, pas la vraie classe MeetingType. (et j'ai décidé que le code plus évolué n'était pas nécessaire vu les déploiements des chrono actuels).

À part ça, j'aurais aimé des "# legacy access from id" dans le code quand on cherche avec les id et non les slugs.

Voilà.

#4

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Fichier 0002-agendas-add-slug-to-MeetingType-model-13792.patch supprimé
#5

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Fichier 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch supprimé
#6

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Fichier 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch supprimé
#8

Mis à jour par Thomas Noël il y a plus de 7 ans

Je me demandais si on pourrait cette fois avoir un unique=True pour le slug d'Agenda, et un unique_together pour MeetingType ? En fait je mets ce commentaire en me demande si on a une raison de ne pas utiliser ces contraintes dans les modèles (on le fait rarement).

#9

Mis à jour par Frédéric Péters il y a plus de 7 ans

Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).

#10

Mis à jour par Thomas Noël il y a plus de 7 ans

Frédéric Péters a écrit :

Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).

Je pense que ça ajoute automatiquement des validations sur les modelforms (sinon effectivement, c'est juste un garde fou)

#11

Mis à jour par Thomas Noël il y a plus de 7 ans

Et donc : ack pour l'instant comme cela. On verra par ailleurs si on ajoute l'unicité dans le model.

#12

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Statut changé de En cours à Résolu (à déployer)
commit c33754433fd7a5968054bed18d77b2844fe8dbe3
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Oct 28 19:36:29 2016 +0200

    api: update meeting types API to be based on slugs (#13792)

commit 6e1fb0aa946552bfb749489d9211a98200807510
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Oct 28 19:06:51 2016 +0200

    agendas: add slug to MeetingType model (#13792)

commit a233f39dd1bbf64f6e830a8853b50cd449502f59
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Oct 28 17:52:21 2016 +0200

    api: update datetimes/fillslot API to get agenda by slug (#13792)
#14

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Frédéric Péters a écrit :

Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).

Ce n'est pas qu'un garde fou, c'est la seule garantie qu'un get_or_create() pourra être exécuté de manière atomique ou pas, en fait get_or_create() ne rend pas les services escomptés si les attributs (hors defaults) ne sont pas couverts par un index d'unicité, c'est pour ça qu'en général il faut toujours s'en servir comme ceci:

   instance, created = XXX.objects.get_or_create(indexed_attribute1=x, indexed_attribute2=y, defaults=defaults)
   if not created:
       for key in defaults:
           setattr(instance, key, defaults[key])
       instance.save()

#15

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF