Projet

Général

Profil

Bug #25954

UnicodeEncodeError sur une condition erronée qui contient des accents

Ajouté par Thomas Noël il y a plus de 5 ans. Mis à jour il y a plus de 5 ans.

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

Révision c29d4735 (diff)
Ajouté par Thomas Noël il y a plus de 5 ans

handle non-ascii syntax error messages on conditions (#25954)

Historique

#1

Mis à jour par Thomas Noël il y a plus de 5 ans

  • Description mis à jour (diff)
#2

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

#3

Mis à jour par Thomas Noël il y a plus de 5 ans

Par ailleurs cette condition aurait dû être refusée à la saisie ?

#4

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/'

#5

Mis à jour par Thomas Noël il y a plus de 5 ans

#7

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.

#8

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)

#9

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

Formats disponibles : Atom PDF