Bug #32424
crash quand restauration d'un brouillon sur sa page de validation et qu'un champ "tableau de longueur variable" a entretemps été ajouté
Début:
17 avril 2019
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Exception: type = '<type 'exceptions.AssertionError'>', value = 'value 'f3' not a list: got ''' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/quixote/form/widget.py", line 790, in __init__ 788 add_element_label="Add row", **kwargs): 789 assert value is None or type(value) is list, ( > 790 "value '%s' not a list: got %r" % (name, value)) 791 assert issubclass(element_type, Widget), ( 792 "value '%s' element_type not a Widget: " locals: add_element_label = 'Add row' element_kwargs = {'readonly': 'readonly'} element_type = <class 'wcs.qommon.form.klass'> kwargs = {'render_br': False, 'title': 'table'} name = 'f3' self = <ERROR WHILE PRINTING VALUE> value = '' File "/home/fred/src/eo/wcs/wcs/qommon/form.py", line 1268, in __init__ 1266 element_type=element_type, 1267 element_kwargs=element_kwargs, > 1268 add_element_label=add_element_label, **kwargs) 1269 1270 def add_media(self): locals: add_element_label = 'Add row' element_kwargs = {'readonly': 'readonly'} element_type = <class 'wcs.qommon.form.klass'> kwargs = {'render_br': False, 'title': 'table'} name = 'f3' self = <ERROR WHILE PRINTING VALUE> value = '' File "/home/fred/src/eo/wcs/wcs/qommon/form.py", line 1629, in __init__ 1627 WidgetListAsTable.__init__(self, name, value, 1628 element_type=self.table_row_class, > 1629 element_kwargs=self.widget_kwargs, **kwargs) 1630 self.columns = columns 1631 locals: columns = ['a', 'b'] kwargs = {'add_element_label': 'Add row', 'render_br': False, 'title': 'table'} min_rows = 5 name = 'f3' self = <ERROR WHILE PRINTING VALUE> value = '' File "/usr/lib/python2.7/dist-packages/quixote/form/form.py", line 234, in add 232 if name in self._names: 233 raise ValueError, "form already has '%s' widget" % name > 234 widget = widget_class(name, *args, **kwargs) 235 self._names[name] = widget 236 if isinstance(widget, SubmitWidget): locals: args = () kwargs = {'render_br': False, 'title': 'table', 'add_element_label': 'Add row', 'value': '', 'readonly': 'readonly', 'columns': ['a', 'b']} name = 'f3' self = <wcs.qommon.form.Form object at 0x7fe22d3f7110> widget_class = <class 'wcs.qommon.form.TableListRowsWidget'> File "/home/fred/src/eo/wcs/wcs/qommon/form.py", line 292, in add 290 advanced = True 291 del kwargs['advanced'] > 292 QuixoteForm.add(self, widget_class, name, *args, **kwargs) 293 widget = self._names[name] 294 widget.advanced = advanced locals: advanced = False args = () kwargs = {'render_br': False, 'title': 'table', 'add_element_label': 'Add row', 'value': '', 'readonly': 'readonly', 'columns': ['a', 'b']} name = 'f3' self = <wcs.qommon.form.Form object at 0x7fe22d3f7110> widget_class = <class 'wcs.qommon.form.TableListRowsWidget'> File "/home/fred/src/eo/wcs/wcs/fields.py", line 485, in add_to_view_form 483 484 form.add(self.widget_class, self.field_key, title = self.label, > 485 value = value, readonly = 'readonly', **kwargs) 486 widget = form.get_widget(self.field_key) 487 if self.extra_css_class: locals: form = <wcs.qommon.form.Form object at 0x7fe22d3f7110> kwargs = {'add_element_label': 'Add row', 'columns': ['a', 'b']} self = <wcs.fields.TableRowsField object at 0x7fe22d3f7710> value = '' File "/home/fred/src/eo/wcs/wcs/formdef.py", line 624, in create_view_form 622 current_page_fields.append(field) 623 value = dict.get(field.id, '') > 624 field.add_to_view_form(form, value) 625 626 if on_page:
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 5 ans
- Fichier 0001-misc-don-t-crash-restoring-unset-table-with-rows-fie.patch 0001-misc-don-t-crash-restoring-unset-table-with-rows-fie.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
- value = dict.get(field.id, '') + value = dict.get(field.id)
Je suis remonté dans l'historique pour voir quand '' aurait été ajouté, en imaginant que ça a pu corriger quelque chose à un moment, qu'il y aurait un message de commit, un ticket, que sais-je.
Mais c'était comme ça dès le premier commit :
+ def create_view_form(self, dict = {}): ... + form.add(widget_classes[field['type']], "f%d" % i, title = field['name'], + readonly = "readonly", value = dict.get(field['name'], ''), **kwargs)
Tous les tests passent etc.
Mis à jour par Frédéric Péters il y a environ 5 ans
(il faudrait celui-ci dans la prochaine mise à jour)
Mis à jour par Thomas Noël il y a environ 5 ans
- Statut changé de Solution proposée à Résolu (à déployer)
commit 520a34c0ac7a6d04c0a19ef31f5b742dda7b0973 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Apr 17 15:59:17 2019 +0200 misc: don't crash restoring unset table with rows field (#32424)
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: don't crash restoring unset table with rows field (#32424)