Bug #35526
Condition de sortie de page évaluée même si la page de ne valide pas les champs obligatoires
0%
Description
On a reçu la trace suivante :
Gmail Benjamin Dauvergne <benjamin.dauvergne@gmail.com> Toodego : [ERROR] AttributeError: 'NoneType' object has no attribute 'strip' Toodego <admin+gnm.prod@entrouvert.com> 21 août 2019 à 18:49 À : admin+gnm.prod@entrouvert.com ## Toodego ## Exception: type = '<type 'exceptions.AttributeError'>', value = ''NoneType' object has no attribute 'strip'' Stack trace (most recent call first): File "<string>", line 1, in <module> locals: <cut> File "/usr/lib/python2.7/dist-packages/wcs/workflows.py", line 1863, in compute 1861 log_exception(e) 1862 if raises: > 1863 raise 1864 return var 1865 locals: cls = <class 'wcs.workflows.WorkflowStatusItem'> context = None e = AttributeError("'NoneType' object has no attribute 'strip'",) expression = {'type': 'python', 'value': 'form_var_nom.strip().replace("\'","\'\'")'} <cut> File "/usr/lib/python2.7/dist-packages/wcs/wscalls.py", line 66, in call_webservice 64 value = str(value) 65 except: > 66 get_publisher().notify_of_exception(sys.exc_info()) 67 else: 68 key = publisher.sitecharset2utf8(key) locals: <cut> File "/usr/lib/python2.7/dist-packages/wcs/wscalls.py", line 202, in call 200 201 def call(self): > 202 (response, status, data) = call_webservice(cache=True, **self.request) 203 return json_loads(data) 204 locals: self = <NamedWsCall 'iodas' id:iodas> File "/usr/lib/python2.7/dist-packages/wcs/wscalls.py", line 208, in __getattr__ 206 def __getattr__(self, attr): 207 try: > 208 return NamedWsCall.get(attr).call() 209 except (KeyError, ValueError): 210 raise AttributeError(attr) locals: attr = 'iodas' self = <wcs.wscalls.WsCallsSubstitutionProxy object at 0x7f56554d2dd0> File "<string>", line 1, in <module> locals: File "/usr/lib/python2.7/dist-packages/wcs/conditions.py", line 72, in evaluate_python 70 def evaluate_python(self, local_variables): 71 global_variables = get_publisher().get_global_eval_dict() > 72 return eval(self.value, global_variables, local_variables) 73 74 def evaluate_django(self, local_variables): locals: <cut> self = <PageCondition (python) "webservice.iodas.get('found') == 1">
Le champ nom
est obligatoire et le webservice iodas défini par :
URL : [passerelle_url]grandlyon-iodas/iodas/getProcedures Données envoyées en paramètres de l'URL : nom : =form_var_nom.strip().replace("'","''") datenais : [form_var_datenais] pren : =form_var_pren.strip().replace("'","''") typepro : 86005470,86722410 dpap : [form_var_dpap] Méthode : GET
Formulaire : https://demarches.toodego.com/backoffice/forms/34/
Il me semble que ce qui se passe c'est que bien que la page ne valide pas, les conditions sont tout de même testées, or en l’occurrence elles dépendent, via l'appel au WS, de la présence d'un champ obligatoire dont on s'attendrait à ce qu'il ne soit pas à None donc.
Aussi le formulaire n'a qu'une seule page, ça a peut-être une influence.
Historique
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Nouveau à Fermé
C'est volontaire, que toutes les erreurs soient fournies à l'usager en même temps, que l'usager ne soit pas bloqué d'abord par une phase de je complète tous les champs avant d'avoir une erreur à cause d'un champ qu'il avait rempli dès le début et pour lequel on avait été jusque-là silencieux.
Merci d'avoir pointé la définition de l'appel en erreur, je l'ai modifié pour que ça gère le None. (et sur le fond ce genre de traitement de données devrait être fait côté connecteur).