Projet

Général

Profil

Development #38237

factoriser simplify()

Ajouté par Nicolas Roche il y a plus de 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
05 décembre 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Beaucoup de connecteur utilise un code similaire pour le paramètre (q) de recherche.

$ git grep "unicodedata.normalize('NFKD'" | cut -d: -f1 | sort | uniq
passerelle/apps/base_adresse/models.py
passerelle/apps/csvdatasource/models.py
passerelle/apps/gdc/views.py
passerelle/apps/solis/models.py
passerelle/apps/sp_fr/models.py
passerelle/contrib/agoraplus/normalize.py
passerelle/contrib/agoraplus/views.py
passerelle/utils/conversion.py


Fichiers

Révisions associées

Révision e4a063fa (diff)
Ajouté par Nicolas Roche il y a environ 4 ans

utils: factorize use of unicodedata module (#38237)

Historique

#1

Mis à jour par Nicolas Roche il y a plus de 4 ans

Je me demande si je ne devrais pas utiliser six à la place d'unicode ?

<<<
if not isinstance(s, unicode):
    s = unicode(s, 'utf-8', 'ignore')
---
if not isinstance(s, six.text_type):
    s = six.text_type(s, 'utf-8', 'ignore')
>>>

#2

Mis à jour par Nicolas Roche il y a environ 4 ans

Rebasé.
La question ci-dessus ne se pose plus :

s = force_text(normalize(s))

#3

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

J'ai un peu du mal avec les multiples passages ascii->unicode, tant qu'à factoriser on pourrait pas plutôt avoir des fonctions qui travaillent uniquement avec des unicode/str et convertir en sotie vers des bytes quand c'est nécessaire (parce que là ça fait mal à la tête).

#4

Mis à jour par Nicolas Roche il y a environ 4 ans

avoir des fonctions qui travaillent uniquement avec des unicode/str

oui, désolé pour le mal de tête.

#5

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

  • Statut changé de Solution proposée à Solution validée

Le gain ne me parait pas terrible mais c'est surtout parce que les usages sont un peu trop divers (on a encore deux versions de simplify, tout ça parce que dans sp_fr on veut des '_' et pas des ' ') et les .decode('ascii', 'replace').encode('ascii') mériteraient des explications à chaque fois.

L'usage de la version locale de normalize() dans csvdatasource() me paraît louche en python3 (on devrait faire decode/encode comme ailleurs, on ne devrait pas générer des bytes dans les expressions), en fait en python2 pareil mais faudrait rendre implicite unicode_literals dans le eval() (voir https://stackoverflow.com/questions/54224792/how-can-a-representation-of-a-literal-be-safely-evaluated-assuming-unicode-lite).

#6

Mis à jour par Nicolas Roche il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit e4a063fac6ebe57b077c3846031c0bca956e1a82
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Mon Dec 9 12:27:55 2019 +0100

    utils: factorize use of unicodedata module (#38237)
#7

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

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF