Bug #40502
comparaison sur None
0%
Description
En testant authentic en python 3 :
File "/home/nroche/src/hobo/hobo/multitenant/settings_loaders.py", line 333, in update_settings_from_path fields.sort(key=lambda x: x.get('order')) TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-manage-None-values-on-profil-fields-sort-405.patch 0001-python3-manage-None-values-on-profil-fields-sort-405.patch ajouté
- Tracker changé de Support à Bug
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
(sans test)
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Development #40403: Tourner authentic2 en python3 ajouté
Mis à jour par Thomas Noël il y a environ 4 ans
J'ai pas la situation : si order existe et est bien à None, ça va continuer de planter. Sans fatigue tu peux faire un « x.get('order') or 0 »
Mis à jour par Nicolas Roche il y a environ 4 ans
Mis à jour par Frédéric Péters il y a environ 4 ans
Faut que ça reste trié sinon les champs ne vont plus apparaitre dans le bon ordre dans authentic.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-remove-sort-try-on-already-sorted-profile-fi.patch 0001-python3-remove-sort-try-on-already-sorted-profile-fi.patch ajouté
En fait c'est préalablement trié en base (ici on ne modifie/modifiait pas l'ordre des champs), cf hobo/profile/models.py :
class AttributeDefinition(models.Model): ... class Meta: ordering = ['order']
Je réalise que je n'ai pas été assez clair et essaye de le préciser dans le test mis à jour.
Mis à jour par Thomas Noël il y a environ 4 ans
Mais on n'est pas du tout "en base" ici : « fields = hobo_json.get('profile', {}).get('fields') »
Mis à jour par Nicolas Roche il y a environ 4 ans
Désolé, je ne suis décidément pas clair. Voici ce que je teste :
le tri à posteriori est inutile/impossible comme on peut aussi le voir ici.
$ tox -e py2-coverage-hobo -- tests/test_settings_loaders.py (Pdb) l 330 331 fields = hobo_json.get('profile', {}).get('fields') 332 if fields: 333 import pdb; pdb.set_trace() 334 fields = [x for x in fields if not x['disabled']] 335 -> ... ## bien, que l'attribut 'order' ne soit pas disponible pour faire le tri, (Pdb) [x.get('order', 'undef') for x in fields] ['undef', 'undef', 'undef', 'undef', 'undef', 'undef', 'undef', 'undef', 'undef'] ## c'est quand même déjà trié (Pdb) [x.get('name') for x in fields] [u'title', u'first_name', u'last_name', u'email', u'address', u'zipcode', u'city', u'phone', u'mobile']
Mis à jour par Frédéric Péters il y a environ 4 ans
Faut pas venir avec des undef dans les tests qui ne font qu'amener de nouvelles questions, surtout précédés d'un "integer field are not exported to hobo.json".
Le truc qui est bel et bien à tester c'est que les champs fournis dans le hobo.json sont bien dans l'ordre défini dans Hobo, dans la db.
Et oui ça terminera en "dans l'hobo.json les champs du profil sont dans une liste déjà correctement triée", ce qui était déjà le propos de #7269 que tu as trouvé, qui a "juste" oublié de retirer la référence à order à cet endroit. Vu la description de #7269 et du commit associé, j'imagine qu'il y a déjà eu à l'époque grande confusion entre l'ordre dans la liste et les attributs order. (peut-être en faisant #7253)
Bref, #7269 n'a pas nettoyé totalement, ce patch nettoie totalement, c'est mieux, mais il ne faudrait pas que l'ajout d'un test bizarre assure à son tour des difficultés de compréhension.
→, je dirais :
- commencer par vérifier l'ordre
env = get_hobo_json() fields = env['profile']['fields'] assert [x['name'] for x in fields] == ['first_name', 'last_name', etc.]
- retirer la partie qui amène que confusion :
- # order is managed on database - assert [x.get('name') for x in fields][0:11:10] == [u'title', u'mobile']
- expliciter qu'on intervertit deux champs
+ # swap title and mobile fields + title = AttributeDefinition.objects.get(name='title') + mobile = AttributeDefinition.objects.get(name='mobile') + (title.order, mobile.order) = (mobile.order, title.order) + title.save() + mobile.save()
- refaire le hobo.json, revérifier l'ordre.
- dégager une autre partie de confusion,
- # integer field are not exported to hobo.json - assert [x.get('order', 'undef') for x in env['profile']['fields']] == ['undef',] * 11
- continuer et vérifier aussi les contenus de A2_*_FIELDS, comme tu as là.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-remove-sort-try-on-already-sorted-profile-fi.patch 0001-python3-remove-sort-try-on-already-sorted-profile-fi.patch ajouté
Patch qui prend en compte les remarques ci-dessus.
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Nicolas Roche il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit cc0677c7e9ac4319bbdd1671292d427494dc9f50 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Sat Mar 7 18:29:34 2020 +0100 python3: remove sort try on already sorted profile fields (#40502)
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
python3: remove sort try on already sorted profile fields (#40502)