Bug #49426
ValueError: not enough values to unpack (expected 3, got 2)
0%
Description
ValueError: not enough values to unpack (expected 3, got 2) File "django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "wcs/compat.py", line 253, in quixote return pub.process_request(pub.get_request()) File "wcs/compat.py", line 221, in process_request django_response.render() File "django/template/response.py", line 107, in render self.content = self.rendered_content File "django/template/response.py", line 84, in rendered_content content = template.render(context, self._request) File "django/template/backends/django.py", line 66, in render return self.template.render(context) File "django/template/base.py", line 207, in render return self._render(context) File "django/template/base.py", line 199, in _render return self.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 177, in render return compiled_parent._render(context) File "django/template/base.py", line 199, in _render return self.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 177, in render return compiled_parent._render(context) File "django/template/base.py", line 199, in _render return self.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/base.py", line 1040, in render output = self.filter_expression.resolve(context) File "django/template/base.py", line 708, in resolve obj = self.var.resolve(context) File "wcs/qommon/template.py", line 533, in variable_resolve value = variable_resolve_orig(self, context) File "django/template/base.py", line 849, in resolve value = self._resolve_lookup(context) File "django/template/base.py", line 911, in _resolve_lookup current = current() File "quixote/form/form.py", line 291, in render r += self._render_body() File "wcs/qommon/form.py", line 423, in _render_body r += self._render_widgets() File "wcs/qommon/form.py", line 444, in _render_widgets r += widget.render() File "wcs/qommon/form.py", line 175, in render return htmltext(render_template(template_names, context)) File "wcs/qommon/template.py", line 415, in render result = render_to_string(template_name, context, request=request) File "django/template/loader.py", line 68, in render_to_string return template.render(context, request) File "django/template/backends/django.py", line 66, in render return self.template.render(context) File "django/template/base.py", line 207, in render return self._render(context) File "django/template/base.py", line 199, in _render return self.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 177, in render return compiled_parent._render(context) File "django/template/base.py", line 199, in _render return self.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/loader_tags.py", line 72, in render result = block.nodelist.render(context) File "django/template/base.py", line 990, in render bit = node.render_annotated(context) File "django/template/base.py", line 957, in render_annotated return self.render(context) File "django/template/defaulttags.py", line 172, in render values = list(values) File "wcs/qommon/form.py", line 266, in get_options object, description, key = option[:3]
https://sentry.entrouvert.org/entrouvert/nfrance/issues/25309/
Fichiers
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a plus de 3 ans
Bon, je ne comprends pas.
Fait étrange, d'après la sentry options contient un seul élément, qui est une liste.
Je ne vois pas d'après le code comment on peut avoir une liste, on a des tuples partout.
Pour ce cas d'usage, on a un ItemField de type radio avec datasource. Raison de plus pour ne pas avoir de liste, get_items renvoie bien un tuple.
J'arrive à écrire un test qui pète sur cette erreur, en passant [[None, '--']]
à options et options_with_attributes à l'init du RadiobuttonsWidget, mais encore une fois, d'après le code je ne vois pas comment on peut en arriver là.
Une idée ?
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-misc-use-3-items-tuple-when-there-s-no-options-for-r.patch 0001-misc-use-3-items-tuple-when-there-s-no-options-for-r.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Je ne vois pas non plus le détail du parcours qui pourrait amener ça, avoir cette présence d'une liste [None, '---'] plutôt que le tuple (None, '---') est étrange (j'imagine qu'il doit y avoir un endroit où on reconstitue l'élément sous forme de liste mais j'ai décidé d'arrêter de chercher); dans ce que j'imagine on a une source de données, elle échoue et/ou est vide, on passe alors par kwargs['options'] = [(None, '---')]
mais plus loin parce qu'on une source de données définie il est attendu que le tuple ait trois éléments, boum.
Je propose de juste poser un patch sur cette hypothèse et ne pas creuser davantage.
Mis à jour par Lauréline Guérin il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
ok si jenkins est d'accord, on verra si cette erreur ressort
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
jenkins ok,
commit 1bee5d7de88a79c3bdfd36836e0eb268e389b6b4 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Dec 18 10:39:52 2020 +0100 misc: use 3-items tuple when there's no options for radio list (#49426)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: use 3-items tuple when there's no options for radio list (#49426)