Development #31184
python3 : uniformiser le comportement de la méthode magique __str__ des OU
0%
Description
Sans redéfinition de cette méthode, en python3, quelle que soit l'OU on a toujours :
>>> whatever_ou 'OrganizationalUnit object'
ce qui, en plus de casser les tests, ne donne pas beaucoup d'information sur l'OU.
On doit redéfinir cette méthode pour imiter le comportement déjà présent en python2.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Paul Marillonnet il y a environ 5 ans
- Fichier 0001-python3-ou.__str__-magid-method-uniformization-31184.patch 0001-python3-ou.__str__-magid-method-uniformization-31184.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Paul Marillonnet il y a environ 5 ans
- Lié à Development #28276: Fonctionner avec Python3 pour Django1.11 ajouté
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Utiliser le décorateur
@six.python_2_unicode_compatibleet renommer tous les
__unicode__
en __str__
.Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Paul Marillonnet il y a presque 5 ans
- Fichier 0001-python3-py2-unicode-compatible-__str__-magid-methods.patch 0001-python3-py2-unicode-compatible-__str__-magid-methods.patch ajouté
- Statut changé de En cours à Solution proposée
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Ne va pas marcher en python2:
list_display = ('__str__', 'slug', 'ou', 'service', 'admin_scope')
C'est bien unicode qu'il faut.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Paul Marillonnet il y a presque 5 ans
- Statut changé de En cours à Information nécessaire
Je dois mal comprendre la doc1 :
On Python 2, it aliases the __str__ method to __unicode__ and creates a new __str__ method that returns the result of __unicode__() encoded with UTF-8
Pour moi c'est pas grave d'afficher dans l'interface admin la valeur encodée en python2, plutôt que de se manger un AttributeError en python3 parce que __unicode__
n'existe pas. Je me plante ?
1 https://pythonhosted.org/six/#six.python_2_unicode_compatible
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Statut changé de Information nécessaire à Solution validée
Si tu mets str ça va appeler str qui renvoie un str encodé en utf-8, Django ne va pas aimer. Si tu veux supporter py2 et py3 tu vas être obligé de mettre un:
if six.PY3: list_display.remove('__unicode__') list_display.insert(0, '__str__')
à moins qu'il existe un moyen un peu uniforme de désigner la conversion en text au niveau de list_display1 qui fonctionn en python2 et python3.
PS: je viens de regarder et en fait Django prend en charge la conversion2, tu peux utiliser __str__
2 https://github.com/django/django/blob/1.11.20/django/contrib/admin/utils.py#L292
Mis à jour par Paul Marillonnet il y a presque 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 43769fb2a7d47ae866146a1d12e65f7df0b7cf02 Author: Paul Marillonnet <pmarillonnet@entrouvert.com> Date: Thu Feb 21 17:32:53 2019 +0100 python3: py2 unicode compatible __str__ magid methods (#31184)
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
python3: py2 unicode compatible str magid methods (#31184)