Development #61080
ValueError sur |add quand on y passe des listes (traiter erreur de gabarit préremplissage / live)
Statut:
Nouveau
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
25 janvier 2022
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Non
Planning:
Non
Description
Exception: type = '<class 'ValueError'>', value = 'argument must be a sequence of length 3' Stack trace (most recent call first): File "/usr/lib/python3/dist-packages/wcs/qommon/templatetags/qommon.py", line 247, in parse_decimal 245 if do_raise: 246 raise > 247 return Decimal(0) 248 249 locals: do_raise = True value = [] File "/usr/lib/python3/dist-packages/wcs/qommon/templatetags/qommon.py", line 538, in add 536 return parse_decimal(term1, do_raise=True) + parse_decimal(term2, do_raise=True) 537 except (ArithmeticError, TypeError): > 538 pass 539 540 # fallback to django add filter locals: term1 = [] term2 = ['13', '26', '53', '54', '69']
Ça saute donc là-dessus et ça se termine en erreur 500; on est dans le calcul d'un préremplissage dans une vue de calcul "live" :
[...] File "/usr/lib/python3/dist-packages/wcs/fields.py", line 506, in get_prefill_value 504 exception=e, 505 ) > 506 return ('', explicit_lock) 507 508 elif t == 'user' and user: locals: WorkflowStatusItem = <class 'wcs.workflows.WorkflowStatusItem'> explicit_lock = False force_string = False self = <ItemsField 2 "Je souhaite m'abonner aux alertes des communes suivantes :"> t = 'string' user = None value = '{{ form_var_villeslv_raw|add:form_var_villespda_raw|add:form_var_villesno_raw }}' File "/usr/lib/python3/dist-packages/wcs/fields.py", line 2348, in get_prefill_value 2346 2347 def get_prefill_value(self, user=None, force_string=True): > 2348 return super().get_prefill_value(user=user, force_string=False) 2349 2350 def convert_value_to_str(self, value): locals: __class__ = <class 'wcs.fields.ItemsField'> force_string = True self = <ItemsField 2 "Je souhaite m'abonner aux alertes des communes suivantes :"> user = None File "/usr/lib/python3/dist-packages/wcs/forms/common.py", line 813, in live_process_fields 811 update_prefill = bool('prefilled_%s' % field.id in get_request().form) 812 if update_prefill: > 813 value = field.get_prefill_value()[0] 814 if field.key == 'bool': 815 value = field.convert_value_from_str(value) [...] REQUEST_URI '/pn_gestion_preferences/live'
Il faudrait sans doute attraper l'erreur et la logguer et faire comme si on avait reçu une chaine vide en résultat.
A priori basiquement :
--- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -810,7 +810,11 @@ class FormStatusPage(Directory, FormTemplateMixin): continue update_prefill = bool('prefilled_%s' % field.id in get_request().form) if update_prefill: - value = field.get_prefill_value()[0] + try: + value = field.get_prefill_value()[0] + except Exception as e: + record_error(...) + value = '' if field.key == 'bool': value = field.convert_value_from_str(value)