Projet

Général

Profil

Bug #39274

MultipleObjectsReturned: get() returned more than one Role -- it returned 2!

Ajouté par Sentry Io il y a environ 4 ans. Mis à jour il y a environ 4 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision f03e3aae (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

ldap: do not fail if Role.MultipleObjectsReturned is raised (#39274)

Historique

#1

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

  • Projet changé de Suivi des traces à Authentic 2
#2

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

  • Assigné à mis à Lauréline Guérin
#3

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

#4

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.

#5

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

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.

#7

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

#8

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.

#9

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Valentin Deniaud a écrit :

Je veux bien une explication sur comment on s'est retrouvé avec deux rôles du même nom et pourquoi c'est normal.

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é) :
  • (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)
#10

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

#12

Mis à jour par Valentin Deniaud il y a environ 4 ans

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

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

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

Formats disponibles : Atom PDF