Projet

Général

Profil

Development #6844

Gestion des expressions

Ajouté par Benjamin Dauvergne il y a environ 9 ans. Mis à jour il y a 10 mois.

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

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

C'est une suite au ticket #1630 il me semble.

Je pense qu'il faudrait envisager un widget "Expression" qui centraliserait les aspects sécuritaires et ergonomique autour de la gestion des expressions Python dans nos interfaces.

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

Il y a deux aspects à spécifier:
  • l'aide à la saisie (voir le #6843 pour une première idée par exemple), en proposant une liste de variables disponibles (on le fait déjà pour les templates il me semble), en signalant (par forcément via une erreur sachant qu'on ne sait pas toujours ce qui est disponible) les variables qui ne nous semblent pas disponibles, en repérant les trucs qui puent en faisant un peut de typage, ex.: 3 < form_xxx avec form_xxx qui est forcément une chaîne,
  • une validation statique de la sécurité d'une expression: en limitant les expressions autorisées via une analyse de l'arbre syntaxique et une liste blanche, au préalable il faudrait accumuler toutes les expressions sur toutes nos plateformes pour voir ce qui est vraiment utilisé, la première version de cette whitelist devrait forcément valider ces expressions pour être acceptable,
  • la gestion de l'exécution des expressions: intercepter les tracebacks et les logger par comme un traceback w.c.s. mais comme un traceback "userland" (il me semble que c'est déjà fait mais je le remet on sait jamais), limiter le temps d'exécution ? faire tourner l'expression dans une sandbox ? mettre en cache le fait qu'une expression est foireuse "consomme trop de ressources", "traceback à chaque fois" pour éviter les DOS.

L'autre intérêt de cette whitelist c'est que ça permettrait de donner une documentation exhaustive des expressions, plutôt que de dire aux gens d'apprendre Python.

C'est un ticket "longue réflexion", d'autres tickets spécifiques pourront s'y relier je pense.


Demandes liées

Lié à w.c.s. - Development #1630: Vérifier la syntaxe des expressions de pré-remplissageFermé07 septembre 2012

Actions
Lié à w.c.s. - Development #6843: le signe == dans les 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 Benjamin Dauvergne il y a environ 9 ans

  • Lié à Development #1630: Vérifier la syntaxe des expressions de pré-remplissage ajouté
#2

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

#3

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

Références pour l'utilisation sûre de eval():

Pour pysandbox mon avis est que c'est une approche par blackliste qui essaie de laisser utilisable un maximum du langage (ça permet de faire un eval() dans le contexte d'un module pas un eval d'expression). Le fait de ne viser que les expressions me semble plus atteignable, déjà avec builtin vide et l'interdiction de toute variable commençant par '_' on devrait aller assez loin.

#8

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

  • Lié à Development #6102: Notification des exceptions liées à un formulaire/workflow ajouté
#9

Mis à jour par Benjamin Dauvergne il y a presque 8 ans

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

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

  • Lié à Development #6102: Notification des exceptions liées à un formulaire/workflow supprimé
#11

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Idée évoquée durant l'eocamp bruxelles 2016:
  • avoir une méthode sur la classe Workflow renvoyant toutes variables de substitutions visibles (ou des préfixes dans certains cas comme les appels de ws).
  • même chose sur les formdef
  • passer le formdef (ou un nouvel objet contexte qui prendrait lui le formdef en paramètre) aux champs d'expression et de template
  • ne valider une expression si elle ne contient que des références à des variables issues du contexte (ou des références qui de par leur préfixe sont susceptibles d'exister), idem pour les templates
Contrainte nouvelles que ça impose:
  • tant qu'on a pas branché un formulaire sur le bon workflow ni défini l'ensemble des options de workflows ou des appels de ws nécessaires, on ne peut pas utiliser les variables correspondantes dans des expressions, i.e. on ne peut plus faire les choses dans le désordre
  • on ne peut pas écrire d'expression d'exemple qui ne marcherait pas en vue de finir plus tard
Bonus:
  • faire cette analyse statiquement pour avoir un tableau de bord des erreurs actuellement présentes avec des liens vers les pages pour corriger, ça permettre de repartir de l'état actuel proprement ne corrigeant tout ce qui est bancale
#12

Mis à jour par Frédéric Péters il y a 10 mois

  • Statut changé de Information nécessaire à Fermé
  • Planning mis à Non

gestion des expressions Python

On a plutôt finalement décidé de quitter ça.

Formats disponibles : Atom PDF