Development #1630
Vérifier la syntaxe des expressions de pré-remplissage
0%
Description
diff --git a/wcs/fields.py b/wcs/fields.py index 81a141a..34c072c 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -94,9 +94,12 @@ class PrefillSelectionWidget(CompositeWidget): value = self.get(name) if value: values[name] = value - if values.get('data', '').startswith('------'): - values = None self.value = values or None + if values and values['type'] == 'formula' and values.get('value'): + try: + compile(values.get('value', ''), '<string>', 'eval') + except (SyntaxError, TypeError), e: + self.set_error(_('invalid expression: %s') % e)
Fichiers
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a plus de 11 ans
Pourquoi la suppression de ces lignes ?
- if values.get('data', '').startswith('------'): - values = None
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
redmine@entrouvert.com écrivait:
La demande #1630 a été mise à jour par Frédéric Péters.
Pourquoi la suppression de ces lignes ?
> - if values.get('data', '').startswith('------'): > - values = None >
Elle m'ont semblé ne plus servir, values ne pouvant jamais contenir la
clé 'data'. Je ferai 2 commits séparés pour l'expliquer.
Mis à jour par Frédéric Péters il y a plus de 11 ans
Mais ce code est peut-être encore utile face à d'anciens formdefs, à défaut de pouvoir s'en assurer, je préférerais le conserver.
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
redmine@entrouvert.com écrivait:
La demande #1630 a été mise à jour par Frédéric Péters.
Mais ce code est peut-être encore utile face à d'anciens formdefs, à défaut de pouvoir s'en assurer, je préférerais le conserver.
Non ce n'est pas possible, "values" n'est pas extrait d'un formdef ou
d'un formdata il est créé à la volée dans la méthode _parse() et ne
contient que les clés "type" et "value"; lis le code si tu veux t'en
assurer [1].
De plus on parle du code de la méthode _parse() d'un widget je ne vois
pas ce que ça a avoir avec le fonctionnement d'un vieux formdef; je ne
vois pas dans quel cas d'utilisation on passerait dans ce code à part la
soumission d'une nouvelle valeur pour le champ "prefill".
[1]: pour t'éviter de le faire:
def _parse(self, request): values = {} for name in ('type', 'value'): value = self.get(name) if value: values[name] = value self.value = values or None if values and values['type'] == 'formula' and values.get('value'): try: compile(values.get('value', ''), '<string>', 'eval') except (SyntaxError, TypeError), e: self.set_error(_('invalid expression: %s') % e)
Mis à jour par Frédéric Péters il y a plus de 11 ans
- Statut changé de Nouveau à En cours
Benjamin, tu pourrais en faire un patch à la mode "git format-patch" ?"
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
- Fichier 0001-fields-removed-dead-code-in-PrefillSelectionWidget._.patch 0001-fields-removed-dead-code-in-PrefillSelectionWidget._.patch ajouté
- Fichier 0002-fields-added-validation-of-Python-expressions-in-Pre.patch 0002-fields-added-validation-of-Python-expressions-in-Pre.patch ajouté
Tout à fait. J'ai découpé le patch en deux, le premier étant le simple nettoyage discuté plus haut.
Mis à jour par Frédéric Péters il y a environ 10 ans
- Statut changé de En cours à Résolu (à déployer)
Je viens de pousser ces deux patchs (mieux vaut tard que jamais…).
Mis à jour par Thomas Noël il y a environ 10 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a environ 9 ans
- Lié à Development #6844: Gestion des expressions ajouté