Bug #13783
modifier un champs backoffice type fichier : erreur sur valeur None
0%
Description
Sur un champs backoffice de type fichier, affecter une valeur vide (photo non obligatoire, par exemple) => None => Crash.
Exception: type = '<type 'exceptions.ValueError'>', value = 'invalid data for file type (None)' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/wcs/wf/backoffice_fields.py", line 114, in get_file_value 112 return upload 113 > 114 raise ValueError('invalid data for file type (%r)' % new_value) 115 116 def perform(self, formdata): locals: new_value = None self = <wcs.wf.backoffice_fields.SetBackofficeFieldsWorkflowStatusItem object at 0x57e0ed0> File "/usr/lib/python2.7/dist-packages/wcs/wf/backoffice_fields.py", line 136, in perform 134 new_value = self.get_file_value(new_value) 135 except ValueError: > 136 get_publisher().notify_of_exception(sys.exc_info()) 137 continue 138 locals: self = <wcs.wf.backoffice_fields.SetBackofficeFieldsWorkflowStatusItem object at 0x57e0ed0> field = {'field_id': 'bo17', 'value': '=visite_var_photo2'} x = <wcs.fields.TextField object at 0x59f0690> new_value = None formdef_field = <wcs.fields.FileField object at 0x59f0310> formdata = <Demande-De-Proximite 'Demande de proximit\xc3\xa9 - n\xc2\xb01-17' id:17>
Files
Associated revisions
History
Updated by Thomas Noël almost 8 years ago
- File 0001-workflows-allow-None-in-file-backoffice-fields-13783.patch 0001-workflows-allow-None-in-file-backoffice-fields-13783.patch added
En fait ça ne marche pas comme ça. Dans la trace ci-dessus on utilise =visite_var_photo2, mais c'est =visite_var_photo2_raw qu'il faut en vrai pour attribuer un fichier. Or, quand y'a pas de fichier, cette variable raw n'existe pas, on aura donc toujours un crash lors du eval qui précède.
Pour par crasher le var, il faut donc un moche « =locals().get('truc_raw') », et dans ce cas, voici le patch.
Updated by Thomas Noël almost 8 years ago
- Status changed from Nouveau to En cours
- Assignee set to Thomas Noël
- Patch proposed changed from No to Yes
Updated by Frédéric Péters almost 8 years ago
Ou =visite_var_photo2_raw if visite_var_photo2 else None
. Mais question, ça aurait pas du sens de simplement poser un _raw à None ?
Updated by Thomas Noël almost 8 years ago
Frédéric Péters a écrit :
Ou
=visite_var_photo2_raw if visite_var_photo2 else None
.
Sans doute plus clair, sauf que visite_var_photo2 n'existe pas forcément non plus.
[ Tiens, ça fait penser à un « if_then_else(condition, val_then, val_else=None) » dans eval_utils ]
Mais question, ça aurait pas du sens de simplement poser un _raw à None ?
Quand la variable n'existe pas du tout, y'aura pas de raw non plus.
Mais par ailleurs oui, ça aurait l'avantage majeur de nettoyer les variables posées dans workflow_data, qui sont parfois pas bien claire. Mais c'est pas une petite modification (et ça ne changerait pas ce patch, je crois).
Bon, on n'arrivera jamais à faire des choses propres en continuant à autoriser du Python.
Updated by Frédéric Péters almost 8 years ago
Ack sur celui-ci et les considérations plus lointaines on ne les oubliera pas.
Updated by Thomas Noël almost 8 years ago
commit 8b6b6c667d62048652f01e52e10e434c0e9bc7df Author: Thomas NOEL <tnoel@entrouvert.com> Date: Fri Oct 28 12:07:07 2016 +0200 workflows: allow None in file backoffice fields (#13783)
workflows: allow None in file backoffice fields (#13783)