Projet

Général

Profil

Development #6843

le signe == dans les expressions

Ajouté par Thomas Noël il y a environ 9 ans. Mis à jour il y a environ 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
27 mars 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:

Description

Quand une expression est foo='bar' au lieu de foo=='bar', on a cette erreur:

Exception:
  type = '<type 'exceptions.SyntaxError'>', value = 'invalid syntax (<string>, line 1)'

Stack trace (most recent call first):
  File "/usr/lib/python2.7/dist-packages/wcs/wf/jump.py", line 205, in must_jump
   203                 condition = self.condition
   204                 global_variables = get_publisher().get_global_eval_dict()
>  205                 get_publisher().notify_of_exception(sys.exc_info())
   206                 must_jump = False
   207

(...)

     condition = 'form_var_intervention="Circulation relative aux travaux"'

Dans un premier temps, je propose d'ajouter une note dans la doc pour attirer l'attention sur ce "==".


Fichiers


Demandes liées

Lié à w.c.s. - Development #6844: Gestion des expressionsFermé27 mars 2015

Actions
Lié à w.c.s. - Development #11042: Avoir un widget validation les expressions calculées dans les workflowsFermé25 mai 2016

Actions

Historique

#1

Mis à jour par Thomas Noël il y a environ 9 ans

#2

Mis à jour par Thomas Noël il y a environ 9 ans

Je sais que la question a déjà été évoquée, je ne sais plus où on en était, mais j'imaginerais bien une fonction du genre:

def error_in_expression(expression):
    try:
        compile(expression, filename='<string>', mode='eval')
    except SyntaxError, e:
        return _('Erreur de syntaxe au caractère %s') % e.offset
    return None

qu'on pourrait appeler quand on affiche un form avec une expression, genre « if error_in_expression(condition): hint="il semble que cette expression comporte une erreur (%s)" % error_in_expression(condition) »

#3

Mis à jour par Benjamin Dauvergne il y a environ 9 ans

C'est une suite au ticket #1630 il me semble. À ce stade on pourrait même envisager un widget "Expression" qui centraliserait tout ça ? Pour l'instant je crois qu'on a simplement un widget 'Préremplissage' mais c'est un cas particulier du cas général "expression". L'autre source de warning qui serait utile ce serait de pouvoir signaler les variables qui nous semble ne pas exister, en analysant l'arbre de l'expression compilée par rapport aux variables de substitution disponibles. Il y aussi le fait de pouvoir filtrer les expressions dangereuses genre open('/etc/passwd').read() ou range(1000000000000), la seule bonne façon de faire semble être de faire une whitelist.

#4

Mis à jour par Benjamin Dauvergne il y a environ 9 ans

Je bouge ma note dans un nouveau ticket j'ai cru celui-ci plus large que ça.

#5

Mis à jour par Benjamin Dauvergne il y a environ 9 ans

#6

Mis à jour par Thomas Noël il y a environ 9 ans

Un exemple de l'idée de la note 2, i.e. juste validation de la syntaxe des expressions lors de leur saisie, et dans ce patch juste pour les conditions de page.

#8

Mis à jour par Benjamin Dauvergne il y a environ 9 ans

Et ensuite évoluer pour que le EvalStringWidget ne renvoie pas juste une chaîne mais un objet d'un type PythonExpression (qui se pickle bien quand même), ayant une méthode eval() et qui implémenterait toutes les siouxeries qu'on pourrait inventer dans le futur.

#9

Mis à jour par Thomas Noël il y a environ 9 ans

Benjamin Dauvergne a écrit :

Je voyais plus un truc comme ça.

Yep, mieux.

compile() peu aussi faire du TypeError, on laisse passer ?

(et sinon, je suis tatasse, mais je trouve qu'utiliser ast.parse serait plus à propos ici)

#10

Mis à jour par Benjamin Dauvergne il y a environ 9 ans

Oui on peut remplacer par ast.parse.

#11

Mis à jour par Frédéric Péters il y a environ 9 ans

Je pousserais dès maintenant l'idée vers un PythonConditionWidget (qui serait aussi à utiliser pour les conditions dans l'action de workflow "saut") et j'y ajouterais une lecture minimale du résultat de l'ast.parse, pour avertir en cas de _ast.Assign que c'est plutôt == que la personne veut (et ainsi totalement revenir à l'intitulé de ce ticket).

#12

Mis à jour par Thomas Noël il y a presque 8 ans

  • Lié à Development #11042: Avoir un widget validation les expressions calculées dans les workflows ajouté
#13

Mis à jour par Thomas Noël il y a presque 8 ans

  • Statut changé de En cours à Résolu (à déployer)

fait dans #11042

#14

Mis à jour par Thomas Noël il y a presque 8 ans

  • Patch proposed changé de Oui à Non
#15

Mis à jour par Frédéric Péters il y a presque 8 ans

  • Statut changé de Résolu (à déployer) à Nouveau

Je viens de mettre un a = 'b' dans un champ "condition" de saut et ça n'a pas râlé du tout. D'ailleurs le champ condition est un StringWidget.

#16

Mis à jour par Thomas Noël il y a presque 8 ans

Frédéric Péters a écrit :

Je viens de mettre un a = 'b' dans un champ "condition" de saut et ça n'a pas râlé du tout. D'ailleurs le champ condition est un StringWidget.

J'ai confondu les expression de conditions avec celles pour compute.

#17

Mis à jour par Frédéric Péters il y a environ 6 ans

  • Statut changé de Nouveau à Fermé

Celui-ci a concerné les expressions; pour l'évaluation des conditions il y a maintenant #22102.

Formats disponibles : Atom PDF