Bug #25954
UnicodeEncodeError sur une condition erronée qui contient des accents
Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
29 août 2018
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Description
Sur
REQUEST_URI '/api/validate-condition?value_django=Une+d%C3%A9ch%C3%A8terie+&value_python=&type=django'
Exception: type = '<type 'exceptions.UnicodeEncodeError'>', value = ''ascii' codec can't encode character u'\xe9' in position 9: ordinal not in range(128)' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/wcs/conditions.py", line 96, in validate_django 94 get_publisher().get_default_templatetags_libraries(), self.value)) 95 except TemplateSyntaxError as e: > 96 raise ValidationError(_('syntax error: %s') % e) locals: e = TemplateSyntaxError(u"Unused 'd\xe9ch\xe8terie' at end of if expression.",) self = <Condition (django) 'Une d\xc3\xa9ch\xc3\xa8terie '> File "/usr/lib/python2.7/dist-packages/wcs/conditions.py", line 81, in validate 79 if not hasattr(self, 'validate_' + self.type): 80 raise ValidationError(_('unknown condition type')) > 81 return getattr(self, 'validate_' + self.type)() 82 83 def validate_python(self): locals: self = <Condition (django) 'Une d\xc3\xa9ch\xc3\xa8terie '> File "/usr/lib/python2.7/dist-packages/wcs/api.py", line 749, in validate_condition 747 except ValidationError as e: 748 hint['klass'] = 'error' > 749 hint['msg'] = str(e) 750 return json.dumps(hint) 751 locals: condition = {'type': 'django', 'value': 'Une d\xc3\xa9ch\xc3\xa8terie '} hint = {'msg': '', 'klass': None} self = <wcs.api.ApiDirectory object at 0x7f23119c94d0>
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 5 ans
Le test qui devrait passer, mais qui ne passe pas :
diff --git a/tests/test_api.py b/tests/test_api.py index 14680d17..9d0262b6 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2092,6 +2092,9 @@ def test_validate_condition(pub): assert resp.json['klass'] == 'error' assert 'Python condition cannot contain {{' in resp.json['msg'] + resp = get_app(pub).get('/api/validate-condition?type=django&value_django=un+%C3%A9l%C3%A9phant') + assert resp.json['klass'] == 'error' + assert resp.json['msg'].startswith('syntax error') resp = get_app(pub).get('/api/validate-condition?type=django&value_django=~2') assert resp.json['klass'] == 'error' assert resp.json['msg'].startswith('syntax error')
Mis à jour par Thomas Noël il y a plus de 5 ans
Par ailleurs cette condition aurait dû être refusée à la saisie ?
Mis à jour par Thomas Noël il y a plus de 5 ans
Thomas Noël a écrit :
Par ailleurs cette condition aurait dû être refusée à la saisie ?
Et c'est sans doute le cas : HTTP_REFERER 'https://services-test.demarches.lametro.fr/backoffice/forms/150/fields/21/'
Mis à jour par Thomas Noël il y a plus de 5 ans
- Fichier 0001-handle-non-ascii-syntax-error-messages-on-conditions.patch 0001-handle-non-ascii-syntax-error-messages-on-conditions.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Sûr.
Mis à jour par Thomas Noël il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit c29d4735caf6e2fcf405d70a1096ddff73fd59d3 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Wed Aug 29 23:08:30 2018 +0200 handle non-ascii syntax error messages on conditions (#25954)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
handle non-ascii syntax error messages on conditions (#25954)