Projet

Général

Profil

Development #33258

crash /manage/ sur une page de rôle

Ajouté par Frédéric Péters il y a presque 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
20 mai 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

cf #33257,

File "/usr/lib/python2.7/dist-packages/django/forms/boundfield.py" in __str__
  41.         return self.as_widget()

File "/usr/lib/python2.7/dist-packages/django/forms/boundfield.py" in as_widget
  127.             **kwargs

File "/usr/lib/python2.7/dist-packages/django_select2/forms.py" in render
  247.         self.set_to_cache()

File "/usr/lib/python2.7/dist-packages/django_select2/forms.py" in set_to_cache
  370.         cache.set(self._get_cache_key(), {

File "/usr/lib/python2.7/dist-packages/django_select2/forms.py" in _get_cache_key
  251.         return "%s%s" % (settings.SELECT2_CACHE_PREFIX, id(self))

File "/usr/lib/python2.7/dist-packages/hobo/multitenant/apps.py" in <lambda>
  23.             conf.LazySettings.__getattr__ = lambda self, name: getattr(self._wrapped, name)

File "/usr/lib/python2.7/dist-packages/hobo/multitenant/settings.py" in __getattr__
  76.         return getattr(self.get_wrapped(), name)

File "/usr/lib/python2.7/dist-packages/django/conf/__init__.py" in __getattr__
  172.         return getattr(self.default_settings, name)

Exception Type: AttributeError at /manage/roles/1581/
Exception Value: 'Settings' object has no attribute 'SELECT2_CACHE_PREFIX'

Fichiers

Révisions associées

Révision f685bb06 (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

manager: import django_select2.conf before running hobo.multitenant.apps.MultitenantAppConfig.ready() (#33258)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

django_select2/django_appconf sont tout pourris :

https://github.com/django-compressor/django-appconf
AppConf classes depend on being imported during startup of the Django process. Even though there are multiple modules loaded automatically, only the models modules (usually the models.py file of your app) are guaranteed to be loaded at startup. Therefore it's recommended to put your AppConf subclass(es) there, too.

Il faut que django_select2.conf soit importé avant que MultitenantAppConfig.ready() ne s'exécute.

#2

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Assigné à mis à Benjamin Dauvergne
#3

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

#4

Mis à jour par Frédéric Péters il y a presque 5 ans

Il n'y a aucun test qui va sur la page d'un rôle, ou la condition pour que ça se produise est plus obscure ?

#5

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Frédéric Péters a écrit :

Il n'y a aucun test qui va sur la page d'un rôle, ou la condition pour que ça se produise est plus obscure ?

Ça n'a malheureusement rien à voir avec authentic ; c'est une interaction malheureuse entre TenantSettingsWrapper de hobo et django_appconf.

Le fonctionnement de django_appconf c'est quand on définit une classe comme cela :

class MyAppConf(AppConf):
    MY_SETTING = 1

    class Meta:
        prefix = 'MYAPP'

à l'initialisation de la classe une métaclasse vient faire :

if not hasattr(django.conf.settings, 'MYAPP_MY_SETTING'):
    django.conf.settings.MYAPP_MY_SETTING = 1

Si c'est fait avant l'exécution de hobo.multitenant.apps.MultitenantAppConfig.ready() et l'installation de TenantSettingsWrapper alors ça va dans le conteneur de settings racine et tout va bien; mais si c'est fait plus tard on ne sait pas trop quand, mais surtout après l'initialisation de hobo.multitenant ça ira peut-être dans un SettingsHolder temporaire spécifique à un tenant et ce sera défait dès que la configuration sera rechargée pour une raison x ou y.

#6

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Benjamin Dauvergne a écrit :

Si c'est fait avant l'exécution de hobo.multitenant.apps.MultitenantAppConfig.ready() et l'installation de TenantSettingsWrapper alors ça va dans le conteneur de settings racine et tout va bien; mais si c'est fait plus tard on ne sait pas trop quand, mais surtout après l'initialisation de hobo.multitenant ça ira peut-être dans un SettingsHolder temporaire spécifique à un tenant et ce sera défait dès que la configuration sera rechargée pour une raison x ou y.

Je précise que c'est django_select2 qui utilise django_appconf pour ses settings.

#7

Mis à jour par Frédéric Péters il y a presque 5 ans

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

Mis à jour par Frédéric Péters il y a presque 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)

Et j'ai poussé dans l'idée de rapidement tagguer et envoyer en recette.

commit f685bb066e38c5623a8558a71fa1ac9866cf669d
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon May 20 12:19:03 2019 +0200

    manager: import django_select2.conf before running hobo.multitenant.apps.MultitenantAppConfig.ready() (#33258)
#9

Mis à jour par Frédéric Péters il y a presque 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF