Bug #26269
suspicion de crash dans get_global_eval_dict
0%
Description
Sur une évaluation de champs de traitement de la sorte :
vars().get('xxx') or vars().get('yyy')
j'obtiens ce log dans le workflow :
TypeError: string indices must be integers, not str
plutôt étrange, du moins qui n'est pas directement liée à l'évaluation.
A regarder le code de wf/backoffice_fields puis de compute, je finis dans get_global_eval_dict où j'ai l'impression que le nouveau vars': compat_locals,
pourrait être la cause de cette trace.
Fichiers
Révisions associées
tests: add check for vars() and missing form_var_ (#26269)
tests: add check for vars().get(...) default value (#26269)
misc: fix behaviour on missing variables with a known prefix (#26269)
Historique
Mis à jour par Frédéric Péters il y a plus de 5 ans
Il y a une trace quelque part avec le détail ? (pas trouvé)
Mis à jour par Thomas Noël il y a plus de 5 ans
Frédéric Péters a écrit :
Il y a une trace quelque part avec le détail ? (pas trouvé)
Aucune trace, juste des logs, c'est sans doute ça qui nous a fait rater l'affaire (except:continue)
Mis à jour par Frédéric Péters il y a plus de 5 ans
Pour info je viens d'ajouter un test, qui passe :
+ item.fields = [{'field_id': 'bo1', 'value': '=vars().get("form_var_string") + " PLOP"'}] + item.perform(formdata) + formdata = formdef.data_class().get(formdata.id) + assert formdata.data['bo1'] == 'HELLO PLOP'
Mis à jour par Frédéric Péters il y a plus de 5 ans
formdata = ... get_publisher().substitutions.feed(formdata) ... pub.substitutions.get_context_variables().get('form_var_nom_autre_professionnel') TypeError Traceback (most recent call last) /usr/lib/python2.7/dist-packages/wcs/ctl/shell.pyc in <module>() ----> 1 pub.substitutions.get_context_variables().get('form_var_nom_autre_professionnel') /usr/lib/python2.7/dist-packages/wcs/qommon/substitution.pyc in get(self, key, default) 130 def get(self, key, default=None): 131 try: --> 132 return self.__getitem__(key) 133 except KeyError: 134 return default /usr/lib/python2.7/dist-packages/wcs/qommon/substitution.pyc in __getitem__(self, key) 148 current_dict = dict.__getitem__(current_dict, part) 149 elif hasattr(current_dict, '__getitem__'): --> 150 current_dict = current_dict[part] 151 else: 152 current_dict = getattr(current_dict, part) TypeError: string indices must be integers, not str
Mis à jour par Frédéric Péters il y a plus de 5 ans
Ce qui se passe , vars().get('form_var_nom_autre_professionnel')
pub.substitutions.get_context_variables().get('form_var_nom') → 'ALAVOINE', et derrière 'ALAVOINE'['autre_professionnel'] et le crash là.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier 0001-misc-fix-behaviour-on-missing-variables-with-a-known.patch 0001-misc-fix-behaviour-on-missing-variables-with-a-known.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Noël il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 6a05724c8ed689109d1f311b989cbdec743f00cc Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon Sep 10 11:45:39 2018 +0200 misc: fix behaviour on missing variables with a known prefix (#26269)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
tests: check vars() wrapper used on backoffice fields (#26269)