Bug #39274
MultipleObjectsReturned: get() returned more than one Role -- it returned 2!
0%
Description
https://sentry.entrouvert.org/entrouvert/publik/issues/464/
MultipleObjectsReturned: get() returned more than one Role -- it returned 2! (11 additional frame(s) were not displayed) ... File "authentic2/backends/ldap_backend.py", line 910, in populate_user self.populate_mandatory_roles(user, block) File "authentic2/backends/ldap_backend.py", line 887, in populate_mandatory_roles role, error = self.get_role(block, role_id=role_name) File "authentic2/backends/ldap_backend.py", line 854, in get_role return Role.objects.get(name=slug, **kwargs), None 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
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Projet changé de Suivi des traces à Authentic 2
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Fichier 0001-ldap-do-not-fail-if-Role.MultipleObjectsReturned-is-.patch 0001-ldap-do-not-fail-if-Role.MultipleObjectsReturned-is-.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Valentin Deniaud il y a environ 4 ans
À mon avis le bug c'est plutôt qu'il y ait plusieurs rôles Agent (cf #33944).
Normalement il y a une contrainte d'unicité sur le nom comme sur le slug, du coup je ne sais pas ce qui justifie le except MultipleObjectsReturned
déjà présent dans le code.
Mis à jour par Serghei Mihai il y a environ 4 ans
Le problème d'origine est dans la ligne:
return Role.objects.get(name=slug, **kwargs), None
qui doit être:
return Role.objects.get(slug=slug, **kwargs), None
Mis à jour par Valentin Deniaud il y a environ 4 ans
Non, regarde le code de la fonction en entier, on cherche par slug et ensuite par nom.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Le code sur la branche ne correspond pas à ce lui posé dans le ticket, mais il a l'air bon (celui du ticket, donc mettre à jour la branche et poussé si les tests passent).
Mis à jour par Valentin Deniaud il y a environ 4 ans
Je veux bien une explication sur comment on s'est retrouvé avec deux rôles du même nom et pourquoi c'est normal.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Valentin Deniaud a écrit :
Les champs slug et name ne sont uniques que par OU ou par OU/service, on a quatre index d'unicité (parce que les valeurs NULL ne sont pas considérées comme identiques par les index d'unicité) :Je veux bien une explication sur comment on s'est retrouvé avec deux rôles du même nom et pourquoi c'est normal.
- (ou_id, name) WHERE service_id IS NULL
- (ou_id, slug) WHERE serivce_id IS NULL
- (ou_id, name, service_id)
- (ou_id, slug, service_id)
Mis à jour par Lauréline Guérin il y a environ 4 ans
du coup mes tests sont faux, je vais revoir ça :)
c'est marrant je n'ai pas d'IntegrityError en local, je vais vérifier ma config
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Fichier 0001-ldap-do-not-fail-if-Role.MultipleObjectsReturned-is-.patch 0001-ldap-do-not-fail-if-Role.MultipleObjectsReturned-is-.patch ajouté
- Statut changé de Solution validée à Solution proposée
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Lauréline Guérin il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit f03e3aae66e189beb6b71f79c103634bddc1ad13 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Tue Jan 28 16:18:14 2020 +0100 ldap: do not fail if Role.MultipleObjectsReturned is raised (#39274)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
ldap: do not fail if Role.MultipleObjectsReturned is raised (#39274)