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)
Files
Related issues
Associated revisions
History
Updated by Lauréline Guérin almost 3 years ago
- Project changed from Suivi des traces to Authentic 2
Updated by Benjamin Dauvergne almost 3 years ago
- Subject changed from MultipleObjectsReturned: get() returned more than one User -- it returned 2! to 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!)
Updated by Benjamin Dauvergne almost 3 years ago
On ne récupère pas MultipleObjectsReturned dans authentic2.api_mixins.GetOrCreateMixinView._lookup_instance, il faudrait.
Updated by Frédéric Péters almost 3 years ago
- Has duplicate Bug #45594: MultipleObjectsReturned: get() returned more than one User -- it returned 2! added
Updated by Paul Marillonnet almost 3 years ago
- Related to Bug #45199: auth_fc: création d'un doublon même si un compte avec l'adresse mail envoyée par FC existe added
Updated by Paul Marillonnet almost 3 years ago
- File 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Updated by Thomas Noël almost 3 years ago
Ç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)
Updated by Paul Marillonnet almost 3 years ago
- File 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch added
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." ?
Updated by Thomas Noël almost 3 years ago
- Planning changed from No to Yes
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
Updated by Paul Marillonnet almost 3 years ago
- File 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch 0001-api-handle-multiple-objects-returned-in-get-or-creat.patch added
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.
Updated by Benjamin Dauvergne over 2 years ago
- Status changed from Solution proposée to Solution validée
Updated by Benjamin Dauvergne over 2 years ago
- Status changed from Solution validée to 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)
Updated by Frédéric Péters over 2 years ago
- Status changed from Résolu (à déployer) to Solution déployée
api: handle multiple objects returned in get-or-create mixin (#44301)