Projet

Général

Profil

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

Ajouté par Sentry Io il y a presque 4 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
22 juin 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Oui

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

Lié à 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 juillet 2020

Actions
Dupliqué par Authentic 2 - Bug #45594: MultipleObjectsReturned: get() returned more than one User -- it returned 2!Rejeté30 juillet 2020

Actions

Révisions associées

Révision bf5df427 (diff)
Ajouté par Paul Marillonnet il y a plus de 3 ans

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

Historique

#1

Mis à jour par Lauréline Guérin il y a presque 4 ans

  • Projet changé de Suivi des traces à Authentic 2
#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!)
#3

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.

#4

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

Mis à jour par Pierre Cros il y a plus de 3 ans

C'est critique au Nord, merci.

#7

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

Mis à jour par Paul Marillonnet il y a plus de 3 ans

#11

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)

#12

Mis à jour par Paul Marillonnet il y a plus de 3 ans

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

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

Mis à jour par Paul Marillonnet il y a plus de 3 ans

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

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

  • Statut changé de Solution proposée à Solution validée
#16

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

  • Assigné à mis à Benjamin Dauvergne
#17

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

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

Formats disponibles : Atom PDF