Projet

Général

Profil

Development #31184

python3 : uniformiser le comportement de la méthode magique __str__ des OU

Ajouté par Paul Marillonnet il y a environ 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
06 mars 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Authentic 2 - Development #28276: Fonctionner avec Python3 pour Django1.11Fermé23 novembre 2018

Actions

Révisions associées

Révision 43769fb2 (diff)
Ajouté par Paul Marillonnet il y a presque 5 ans

python3: py2 unicode compatible str magid methods (#31184)

Historique

#1

Mis à jour par Paul Marillonnet il y a environ 5 ans

#2

Mis à jour par Paul Marillonnet il y a environ 5 ans

#3

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

  • Assigné à mis à Paul Marillonnet
#4

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

Utiliser le décorateur

@six.python_2_unicode_compatible
et renommer tous les __unicode__ en __str__.

#5

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

  • Statut changé de Solution proposée à En cours
#7

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.

#8

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Statut changé de Solution proposée à En cours
#9

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

#10

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.

1 https://docs.djangoproject.com/fr/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

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

#11

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)
#12

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

Formats disponibles : Atom PDF