Bug #44301
Prendre en compte l'exception MultipleObjectsReturned dans l'implémentation get/update-or-create de l'API (était MultipleObjectsReturned: get() returned more than one User -- it returned 2!)
0%
Description
https://sentry.entrouvert.org/entrouvert/publik/issues/2854/
MultipleObjectsReturned: get() returned more than one User -- it returned 2! (9 additional frame(s) were not displayed) ... File "django/utils/decorators.py", line 185, in inner return func(*args, **kwargs) File "authentic2/api_mixins.py", line 74, in create self._lookup_object = self._lookup_instance(get_or_create_keys) File "authentic2/api_mixins.py", line 49, in _lookup_instance return ModelClass.objects.get(**kwargs) File "django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "django/db/models/query.py", line 384, in get (self.model._meta.object_name, num)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a presque 4 ans
- Projet changé de Suivi des traces à Authentic 2
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Sujet changé de MultipleObjectsReturned: get() returned more than one User -- it returned 2! à Prendre en compte l'exception MultipleObjectsReturned dans l'implémentation get/update-or-create de l'API (était MultipleObjectsReturned: get() returned more than one User -- it returned 2!)
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
On ne récupère pas MultipleObjectsReturned dans authentic2.api_mixins.GetOrCreateMixinView._lookup_instance, il faudrait.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Dupliqué par Bug #45594: MultipleObjectsReturned: get() returned more than one User -- it returned 2! ajouté
Mis à jour par Paul Marillonnet il y a plus de 3 ans
- Lié à Bug #45199: auth_fc: création d'un doublon même si un compte avec l'adresse mail envoyée par FC existe ajouté
Mis à jour par Paul Marillonnet il y a plus de 3 ans
- Fichier 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.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
Ça m'a l'air bien, en tout cas le test est très clair, même si 400 (Bad Request) n'est pas le statut que j'attendais. Mais on peut imaginer que ça veuille dire "attention tu demandes un email unique mais en fait c'est juste de la chance si ça marche car il n'y a pas de contrainte à ce niveau".
Et dans ce cas, on se dit qu'on ne devrait jamais autoriser un get_or_create=email quand l'email n'est pas configuré pour être unique, et toujours faire un 400 dans ce cas...?
(J'aime bien remuer la vase)
Mis à jour par Paul Marillonnet il y a plus de 3 ans
- Fichier 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch ajouté
Thomas Noël a écrit :
Ça m'a l'air bien, en tout cas le test est très clair, même si 400 (Bad Request) n'est pas le statut que j'attendais. Mais on peut imaginer que ça veuille dire "attention tu demandes un email unique mais en fait c'est juste de la chance si ça marche car il n'y a pas de contrainte à ce niveau".
Nouveau patch avec un code d'erreur 409 (conflit sur la ressource demandée).
Et dans ce cas, on se dit qu'on ne devrait jamais autoriser un get_or_create=email quand l'email n'est pas configuré pour être unique, et toujours faire un 400 dans ce cas...?
Je ne sais pas si l'API avait été conçue pour que les attributs de get_or_create forment une clé naturelle. Est-ce aberrant de demander à l'API "trouve moi un Jean-Michel Dupont s'il n'y en a qu'un seul, et s'il n'existe pas, tiens justement en voilà un." ?
Mis à jour par Thomas Noël il y a plus de 3 ans
- Planning changé de Non à Oui
J'ai l'impression que ça fait bien le job. Mais je suis perdu dans les questions métaphysiques d'usage de ce get_or_create, alors je préfère laisser un autre oeil relire aussi.
Détails :- habituellement on ne met pas à jour le copyright, je ne sais pas si faut ou pas
- j'aurais posé Conflit dans api_mixins parce qu'ajouter des fichiers qui déclarent juste un petit truc utilisé une seule fois, bof
Mis à jour par Paul Marillonnet il y a plus de 3 ans
- Fichier 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch ajouté
Thomas Noël a écrit :
J'ai l'impression que ça fait bien le job. Mais je suis perdu dans les questions métaphysiques d'usage de ce get_or_create, alors je préfère laisser un autre oeil relire aussi.
(Oui en remuant la vase on finit par s'y perdre ☺)
Détails :
- habituellement on ne met pas à jour le copyright, je ne sais pas si faut ou pas
Ok, dans le doute je ne mets pas à jour.
- j'aurais posé Conflit dans api_mixins parce qu'ajouter des fichiers qui déclarent juste un petit truc utilisé une seule fois, bof
Ok.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 52c21f7f3e15a32b3f2ec12e56155197baac4cbd Author: Paul Marillonnet <pmarillonnet@entrouvert.com> Date: Thu Jul 30 17:31:00 2020 +0200 api: handle multiple objects returned in get-or-create mixin (#44301)
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
api: handle multiple objects returned in get-or-create mixin (#44301)