Projet

Général

Profil

Development #53403

erreur django-select2 (avec django 2.2 ?)

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
24 avril 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Internal Server Error: /visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/

NotImplementedError at /visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/
You need to overwrite "set_to_cache" or ensure that Select2ChoicesWidget is serialisable.

Request Method: GET
Request URL: https://statistiques.guichet-recette.grandlyon.com/visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/
Django Version: 2.2.20
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
Server time: sam, 24 Avr 2021 11:39:17 +0200
Installed Applications:
''
Installed Middleware:
''

Traceback:

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

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

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

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

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

During handling of the above exception ('Settings' object has no attribute 'SELECT2_CACHE_PREFIX'), another exception occurred:

File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)

File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
  143.                 response = response.render()

File "/usr/lib/python3/dist-packages/django/template/response.py" in render
  106.             self.content = self.rendered_content

File "/usr/lib/python3/dist-packages/django/template/response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "/usr/lib/python3/dist-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
  188.             return template.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  173.                 return self._render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render
  993.         return render_value_in_context(output, context)

File "/usr/lib/python3/dist-packages/django/template/base.py" in render_value_in_context
  972.             value = str(value)

File "/usr/lib/python3/dist-packages/django/utils/html.py" in <lambda>
  388.     klass.__str__ = lambda self: mark_safe(klass_str(self))

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

File "/usr/lib/python3/dist-packages/django/forms/boundfield.py" in as_widget
  93.             renderer=self.form.renderer,

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

File "/usr/lib/python3/dist-packages/django_select2/forms.py" in set_to_cache
  267.             raise NotImplementedError(msg % self.__class__.__name__)

Exception Type: NotImplementedError at /visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/
Exception Value: You need to overwrite "set_to_cache" or ensure that Select2ChoicesWidget is serialisable.
Request information:
USER: cf6c572dee184210a3af6a0067fbfe

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES:
csrftoken-35eb5b = 'ZdCaJSVu6ipzMdX7ofLijYDBRxNQDxwQAw1UQKSyJjFw0Ja0gfN2RHEUaAp4YmVa'
publik_portal_agent_url = 'https%3A%2F%2Fportail-agent.guichet-recette.grandlyon.com%2F'
publik_portal_agent_title = 'Portail%20Agent'
a2-opened-session-6cd604 = '1'
sessionid-35eb5b = 'vhw2rpmq36v0q9vzwi7s572dfp5l0k9d'

META:
CSRF_COOKIE = 'ZdCaJSVu6ipzMdX7ofLijYDBRxNQDxwQAw1UQKSyJjFw0Ja0gfN2RHEUaAp4YmVa'
CSRF_COOKIE_USED = True
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'fr,en;q=0.7,es;q=0.3'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken-35eb5b=ZdCaJSVu6ipzMdX7ofLijYDBRxNQDxwQAw1UQKSyJjFw0Ja0gfN2RHEUaAp4YmVa; publik_portal_agent_url=https%3A%2F%2Fportail-agent.guichet-recette.grandlyon.com%2F; publik_portal_agent_title=Portail%20Agent; a2-opened-session-6cd604=1; sessionid-35eb5b=vhw2rpmq36v0q9vzwi7s572dfp5l0k9d'
HTTP_DNT = '1'
HTTP_HOST = 'statistiques.guichet-recette.grandlyon.com'
HTTP_REFERER = 'https://statistiques.guichet-recette.grandlyon.com/'
HTTP_SEC_GPC = '1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0'
HTTP_X_FORWARDED_FOR = '77.109.96.212, 10.128.2.98'
HTTP_X_FORWARDED_PORT = '443'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_PROTOCOL = 'ssl'
HTTP_X_FORWARDED_SSL = 'on'
HTTP_X_REAL_IP = '10.128.2.98'
PATH_INFO = '/visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/'
QUERY_STRING = ''
REMOTE_ADDR = '77.109.96.212'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/visualization/warehouse/demarches_guichet_recette_grandlyon_com/formdata_voirie_et_signalisation/'
SCRIPT_NAME = ''
SERVER_NAME = 'pddv-gdlyon-gnm-front-2.synaaps.local'
SERVER_PORT = '80'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.node = b'pddv-gdlyon-gnm-front-2.synaaps.local'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f8050c43f90>
wsgi.multiprocess = True
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'

Settings:
Using settings module 


Fichiers

Révisions associées

Révision aec477dd (diff)
Ajouté par Valentin Deniaud il y a environ 3 ans

settings: explicitly set select2 cache prefix (#53403)

Historique

#1

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

  • Assigné à mis à Valentin Deniaud
#3

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

  • Statut changé de Nouveau à En cours

Le gros de la trace c'est du bruit, l'important c'est au début 'Settings' object has no attribute 'SELECT2_CACHE_PREFIX').

Je ne reproduis ni en local ni sur le SaaS, il doit y avoir une conf particulière au CD31 et à GL...

#4

Mis à jour par Frédéric Péters il y a environ 3 ans

Ça arrive où/comment settings.SELECT2_CACHE_PREFIX ?

Dans bijoe on l'utilis et on la définit uniquement dans les tests : (?)

bijoe/visualization/views.py:            cache_key = '%s%s' % (settings.SELECT2_CACHE_PREFIX, key)
tests/settings.py:SELECT2_CACHE_PREFIX = 'select2_'
#5

Mis à jour par Frédéric Péters il y a environ 3 ans

Je me réponds, gros bazar django-appconf, qui fait qu'in fine ça vient de l'attribut CACHE_PREFIX de la classe dans le conf.py de django_select2.

#6

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

Oui et l'ajout dans les tests vient embrouiller le tout je crois qu'il ne sert à rien.

#8

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

Si je vais sur un shell des serveurs concernés et que je tape settings.SELECT2_CACHE_PREFIX ça marche.

Comme ça m'a fait douter de mon analyse, je suis allé poser via hobo un SETTING_SELECT2_CACHE_PREFIX (sur GL) et hop ça remarche. Je l'enlève et hop ça replante.

Donc c'est bien ça, la pose des settings par défaut de django-select2 via django-appconf ne fonctionne plus sur ces serveurs en django 2.2.

Le fix simple sans comprendre ce serait de définir explicitement ça dans les settings de bijoe, ce que j'ai quand même bien envie de faire.

#9

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

Pas d'inspiration pour continuer l'analyse, patch sans comprendre donc.

#11

Mis à jour par Emmanuel Cazenave il y a environ 3 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit aec477ddf36e7026e54e73461ab6af98121e0ba9
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Tue Apr 27 17:09:02 2021 +0200

    settings: explicitly set select2 cache prefix (#53403)
#13

Mis à jour par Frédéric Péters il y a environ 3 ans

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

Formats disponibles : Atom PDF