Development #33258
crash /manage/ sur une page de rôle
0%
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
Historique
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.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-manager-import-django_select2.conf-before-running-ho.patch 0001-manager-import-django_select2.conf-before-running-ho.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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 ?
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.
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.
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Solution proposée à Solution validée
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)
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
manager: import django_select2.conf before running hobo.multitenant.apps.MultitenantAppConfig.ready() (#33258)