Projet

Général

Profil

Bug #10447

chaines unicode dans la vue /inspect

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Début:
25 mars 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Exception:
  type = '<type 'exceptions.UnicodeDecodeError'>', value = ''ascii' codec can't decode byte 0xc2 in position 42: ordinal not in range(128)'

Stack trace (most recent call first):
  File "/usr/lib/python2.7/dist-packages/wcs/backoffice/management.py", line 1824, in inspect
  1822             r += htmltext('</div>')
  1823         r += htmltext('</ul>')
> 1824         return r.getvalue()
  1825
  1826
...
'sas_response_data_adult1_address_street_text': 'MODIGLIANI', u'form_var_address_city_post_code': u'94140',
'sas_response_data_family_address_street_text': 'MODIGLIANI', 'form_user_var_address'

Fichiers


Demandes liées

Dupliqué par w.c.s. - Bug #10539: crash encodage sur /inspectRejeté04 avril 2016

Actions

Révisions associées

Révision b5a493b9 (diff)
Ajouté par Benjamin Dauvergne il y a environ 8 ans

misc: encode data source value using qommon.misc.json_encode_helper (#10447)

It prevents data sources from outputting unicode strings.

Révision efbf9150 (diff)
Ajouté par Benjamin Dauvergne il y a environ 8 ans

backoffice: prevent non utf-8 strings from breaking /inspect (#10447)

Révision d88d726e (diff)
Ajouté par Frédéric Péters il y a environ 8 ans

trivial: use %r in inspect string (#10447)

Historique

#1

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

#2

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

C'est bizarre qu'on ait pas eu de souci avant quand même.

#3

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

print 'structured_items', structured_items

Je ne suis pas sûr du str() forcé, le json_loads, il assure déjà que les chaines unicode se trouvent encodées en str. (il me semble) Et si c'est une data_source qui ne passe pas par le json_loads, le site_encode() est plus adapté que le str().

À côté, il y a aussi besoin d'un patch, différent, pour que la page /inspect ne plante pas.

Et ça serait sans doute bien d'avoir un test ou l'autre.

#4

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

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

[...]

Je ne suis pas sûr du str() forcé, le json_loads, il assure déjà que les chaines unicode se trouvent encodées en str. (il me semble) Et si c'est une data_source qui ne passe pas par le json_loads, le site_encode() est plus adapté que le str().

Non il ne convertit que les chaînes en chaînes, dans les tests il y a des sources JSON avec des entiers qui plantent sans le str() forcé (et ne plantez pas avec le site_encode). get_items() est un cas particulier où on ne veut que des chaînes, le str() forcé me semble donc pertinent.

À côté, il y a aussi besoin d'un patch, différent, pour que la page /inspect ne plante pas.

Yep.

Et ça serait sans doute bien d'avoir un test ou l'autre.

Un test complet avec une datasource, un formulaire avec un champ item issu de la datasource et un accès sur /inspect ?

#7

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

Un test complet avec une datasource, un formulaire avec un champ item issu de la datasource et un accès sur /inspect ?

Concernant le patch sur le /inspect, des tests passant sur les différentes situations traitées. (les branches du if et 2× try/except)

Pour le patch sur le data_source, je dirais qu'un champ item alimenté par une data source produisant des chaines unicode (et en écrivant ça je me dis qu'il faudrait plutôt une fonction générale qui serait tout aussi bien appelée pour la situation "formule python", plutôt que traiter uniquement le cas du json.

Patch 2 amélioré.

Il s'y est ajouté un "validate" au _q_export, sans objet.

#8

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

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

Un test complet avec une datasource, un formulaire avec un champ item issu de la datasource et un accès sur /inspect ?

Concernant le patch sur le /inspect, des tests passant sur les différentes situations traitées. (les branches du if et 2× try/except)

Pour le patch sur le data_source, je dirais qu'un champ item alimenté par une data source produisant des chaines unicode (et en écrivant ça je me dis qu'il faudrait plutôt une fonction générale qui serait tout aussi bien appelée pour la situation "formule python", plutôt que traiter uniquement le cas du json.

Tests ajoutés avec passage dans toutes les branches, à noter que ça ajoute une dépendance sur pyquery (accroché à webtest) pour les tests; dépendance que j'ai mise dans le tox.ini du ticket #10473. Ça dépend aussi du ticket UTF-8 (quand on commence à faire des recherches de chaînes accentués das le contenu des réponses, les problèmes se voient tout de suite), #10472.

Patch 2 amélioré.

Il s'y est ajouté un "validate" au _q_export, sans objet.

Yep c'était un bout du #10444 que je développe dans la même branche.

#9

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

Le même avec un contournement du bug dans htmltext() découvert dans #10473.

-                r += htmltext(' <span class="type">(%s)</span>') % type(v)
+                r += htmltext(' <span class="type">(%s)</span>') % repr(type(v))
#10

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

Et mettre %r dans la chaine, plutôt ?

#12

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

  • Dupliqué par Bug #10539: crash encodage sur /inspect ajouté
#13

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

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

Merci, j'ai poussé.

commit efbf9150689b42537b308893d8f9c5251216a3b7
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Mar 25 23:25:39 2016 +0100

    backoffice: prevent non utf-8 strings from breaking /inspect (#10447)

commit b5a493b941b161d19ce7c1b1cf2dae0bba20f2c6
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Mar 25 19:46:49 2016 +0100

    misc: encode data source value using qommon.misc.json_encode_helper (#10447)

    It prevents data sources from outputting unicode strings.
#14

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

T'as du pousser la mauvaise version ce bout s'est perdu:

diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py
index cce82c9..09ed50a 100644
--- a/wcs/backoffice/management.py
+++ b/wcs/backoffice/management.py
@@ -1852,7 +1852,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
             r += htmltext('<li>%s') % (k, k)
r = htmltext(' <div class="value"><span>%s</span>') % safe(v)
if not isinstance(v, basestring):
- r += htmltext(' <span class="type">(%s)</span>') % repr(type(v))
r += htmltext(' <span class="type">(%r)</span>') % type(v)
r += htmltext('</div>')
r += htmltext('</ul>')
return r.getvalue()

Mais je pense que ça ne nécessite pas un nouveau commit.

#15

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

J'ai quand même poussé la modif.

#16

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

  • Version cible mis à v1.40
#17

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

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

Formats disponibles : Atom PDF