Project

General

Profile

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!)

Added by Sentry Io almost 3 years ago. Updated over 2 years ago.

Status:
Fermé
Priority:
Normal
Category:
-
Target version:
-
Start date:
22 June 2020
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
Yes

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

Related to Plugin FS FranceConnect - Bug #45199: auth_fc: création d'un doublon même si un compte avec l'adresse mail envoyée par FC existeFermé16 July 2020

Actions
Has duplicate Authentic 2 - Bug #45594: MultipleObjectsReturned: get() returned more than one User -- it returned 2!Rejeté30 July 2020

Actions

Associated revisions

Revision bf5df427 (diff)
Added by Paul Marillonnet over 2 years ago

api: handle multiple objects returned in get-or-create mixin (#44301)

History

#1

Updated by Lauréline Guérin almost 3 years ago

  • Project changed from Suivi des traces to Authentic 2
#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!)
#3

Updated by Benjamin Dauvergne almost 3 years ago

On ne récupère pas MultipleObjectsReturned dans authentic2.api_mixins.GetOrCreateMixinView._lookup_instance, il faudrait.

#4

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
#5

Updated by Pierre Cros almost 3 years ago

C'est critique au Nord, merci.

#7

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
#10

Updated by Paul Marillonnet almost 3 years ago

#11

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)

#12

Updated by Paul Marillonnet almost 3 years ago

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." ?

#13

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
#14

Updated by Paul Marillonnet almost 3 years ago

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.

#15

Updated by Benjamin Dauvergne over 2 years ago

  • Status changed from Solution proposée to Solution validée
#16

Updated by Benjamin Dauvergne over 2 years ago

  • Assignee set to Benjamin Dauvergne
#17

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)
#18

Updated by Frédéric Péters over 2 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF