Development #34008
UnicodeDecodeError avec nom d'utilisateur non ascii
0%
Description
MELLON_USERNAME_TEMPLATE = '{attributes[first_name][0]}.{attributes[last_name][0]}'
et utilisateur qui s'appellerait Thomas Noël, ça crash au moment du login sur une instruction de logging, à cause du tréma sur le e.
Request Method: POST Request URL: http://127.0.0.1:8003/accounts/mellon/login/ Django Version: 1.8.19 Python Version: 2.7.15 Installed Applications: ('django.contrib.contenttypes', 'django.contrib.auth', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'watson', 'autocomplete_light', 'django.contrib.admin', 'django_tables2', 'django_journal', 'crispy_forms', 'docbow_project.humantime', 'docbow_project.docbow', 'docbow_project.pfwb', 'mellon') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'docbow_project.docbow.middleware.KeepUserAroundMiddleware', 'django_journal.middleware.JournalMiddleware', 'watson.middleware.SearchContextMiddleware') Traceback: File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 58. return view_func(*args, **kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 71. return self.dispatch(request, *args, **kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 89. return handler(request, *args, **kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in post 135. return self.sso_success(request, login) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in sso_success 196. return self.authenticate(request, login, attributes) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in authenticate 199. user = auth.authenticate(saml_attributes=attributes) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in authenticate 74. user = backend.authenticate(**credentials) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/backends.py" in authenticate 21. user = adapter.lookup_user(idp, saml_attributes) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/adapters.py" in lookup_user 146. user, name_id, issuer) File "/usr/lib/python2.7/logging/__init__.py" in info 1174. self._log(INFO, msg, args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py" in _log 1293. self.handle(record) File "/usr/lib/python2.7/logging/__init__.py" in handle 1303. self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py" in callHandlers 1343. hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py" in handle 766. self.emit(record) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/entrouvert/logging/handlers.py" in emit 22. source_msg = self.format(record) File "/usr/lib/python2.7/logging/__init__.py" in format 741. return fmt.format(record) File "/usr/lib/python2.7/logging/__init__.py" in format 465. record.message = record.getMessage() File "/usr/lib/python2.7/logging/__init__.py" in getMessage 329. msg = msg % self.args Exception Type: UnicodeDecodeError at /accounts/mellon/login/ Exception Value: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128)
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-use-unicode_literals-34008.patch 0001-use-unicode_literals-34008.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Le seul cas problématique c'est quand on passe des valeurs à lasso qui n'aime pas trop l'unicode en python2.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Benjamin Dauvergne a écrit :
Le seul cas problématique c'est quand on passe des valeurs à lasso qui n'aime pas trop l'unicode en python2.
Pour Lasso ça ne pose souci que quand on passe une liste, un tuple ou un dico, les chaînes littérales pourvu qu'elles soient encodables en ASCII ça va.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Utiliser str() est une meilleure idée que b''.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
La source du problème c'est l'utilisation de six.python_2_unicode_compatible
qui fait que __str__
renvoie de l'utf-8 maintenant alors qu'avant ça renvoyait de l'unicode; c'est une source de problèmes différents mais ça nous rend plus prêt d'un passage à python3.
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
- Sujet changé de UnicodeDecodeError sur journalisation à UnicodeDecodeError avec nom d'utilisateur non ascii
Ça pète maintenant un peu plus loin.
Environment: Request Method: POST Request URL: http://127.0.0.1:8003/accounts/mellon/login/ Django Version: 1.8.19 Python Version: 2.7.15 Installed Applications: ('django.contrib.contenttypes', 'django.contrib.auth', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'watson', 'autocomplete_light', 'django.contrib.admin', 'django_tables2', 'django_journal', 'crispy_forms', 'docbow_project.humantime', 'docbow_project.docbow', 'docbow_project.pfwb', 'mellon') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'docbow_project.docbow.middleware.KeepUserAroundMiddleware', 'django_journal.middleware.JournalMiddleware', 'watson.middleware.SearchContextMiddleware') Traceback: File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 58. return view_func(*args, **kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 71. return self.dispatch(request, *args, **kwargs) File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 89. return handler(request, *args, **kwargs) File "/home/cazino/src/django-mellon/mellon/views.py" in post 152. return self.sso_success(request, login) File "/home/cazino/src/django-mellon/mellon/views.py" in sso_success 184. content = ''.join(content) Exception Type: UnicodeDecodeError at /accounts/mellon/login/ Exception Value: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Mieux ?
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Ça casse autre chose maintenant (sur une install publik-devinst, sans le MELLON_USERNAME_TEMPLATE = '{attributes[first_name][0]}.{attributes[last_name][0]}')
(pas testé le cas original)
C'est peut-être trop radical de passer tout le package à unicode_literals
non ? (C'est un peu ce qui se raconte là :https://python-future.org/unicode_literals.html)
Environment: Request Method: GET Request URL: https://combo.dev.publik.love/accounts/mellon/login/?SAMLart=AAQAAA3DX2fh%2FZYaEJ6kxSg28Zi1TZdIRDNFRUVEODMwQzAyQUYxMEU4NUQ%3D&RelayState=9e765ef5-9b60-4039-85d2-71ac8f9998ca Django Version: 1.11.18 Python Version: 2.7.16 Installed Applications: '' Installed Middleware: '' Traceback: File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 41. response = get_response(request) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response 249. response = self._get_response(request) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 58. return view_func(*args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 68. return self.dispatch(request, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 88. return handler(request, *args, **kwargs) File "/home/cazino/src/django-mellon/mellon/views.py" in get 389. return self.continue_sso_artifact(request, lasso.HTTP_METHOD_ARTIFACT_GET) File "/home/cazino/src/django-mellon/mellon/views.py" in continue_sso_artifact 368. return self.sso_success(request, login) File "/home/cazino/src/django-mellon/mellon/views.py" in sso_success 202. content = ''.join(lasso_decode(content.decode)) Exception Type: AttributeError at /accounts/mellon/login/ Exception Value: 'list' object has no attribute 'decode'
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Mais non c'est moi qui ai fait une type pourrie (content.decode).
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Et ça marche ? (j'arrête de faire la petite main testeuse).
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Voilà avec des tests pour que tu puisses vérifier via coverage que tout passe.
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
- Statut changé de Solution proposée à Solution validée
Testé manuellement les deux cas qui plantaient, ça marche.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit ab92ca9a076326d3b8a56999945893135b2c9edd Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Jun 14 15:13:54 2019 +0200 use unicode_literals (#34008)
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
use unicode_literals (#34008)