Projet

Général

Profil

Bug #35526

Condition de sortie de page évaluée même si la page de ne valide pas les champs obligatoires

Ajouté par Benjamin Dauvergne il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
21 août 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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

#1

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).

Formats disponibles : Atom PDF