Projet

Général

Profil

Development #43074

email_validator ne doit pas être utilisé de manière inconditionelle

Ajouté par Benjamin Dauvergne il y a presque 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
19 mai 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Il faut l'ajouter à la définition du champ email du modèle User, pas l'appeler inconditionnellement dans BaseUserForm, sinon on ne peut plus créer d'utilisateur sans email.


Fichiers

Révisions associées

Révision ab69544f (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

tests: add tests on user creation trough manager (#43074)

Révision 018e276c (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

misc: validate emails in Model.clean (#43074)

Révision d37e8f0d (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

misc: let User model validate identifiers and uniqueness (#43074)

Révision bee7491f (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

manager: set created user's OU in clean() (#43074)

Any modification to the model should be done trough clean() method, as
it enables later checks like uniqueness validation. No instance
initialization should ever be done in save() methods unless it's
garanteed that it cannot mess with validation.

Révision f3f83743 (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

misc: simplify ValidatedEmailField (#43074)

Révision 8dee6912 (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

tests: work around bytes/str usage in webtest (#43074)

webtest only support byte string as GET parameters with python2.

Révision cd490ec3 (diff)
Ajouté par Benjamin Dauvergne il y a presque 4 ans

misc: validate emails in Model.clean (#43074)

Historique

#3

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

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

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

C'est moche que ça casse dans un seul environnement, ça sent mauvais.

#6

Mis à jour par Valentin Deniaud il y a presque 4 ans

Dans 0002,

+        if (not self.username
+            and not self.email
+            and not (self.first_name
+                     or self.last_name)):

Chacun sa logique mais moi ça m'a demandé trop de temps de cerveau, j'aurais écris ça juste à coup de and not ou juste à coup de not or, pas un mix des deux (ou encore avec any()).

+            username_qs = qs
+            if not app_settings.A2_USERNAME_IS_UNIQUE:
+                username_qs = qs.filter(ou=self.ou)

La première ligne ne sert à rien (et faire pareil pour email_qs plus bas tant qu'à faire, où l'affectation sert bien à quelque chose mais on peut s'en passer en faisant comme ça).

Sinon de manière générale, j'aimerais que les tests ne soient pas cassés entre deux commits (coucou git rebase --exec). Dans le cas présent c'est sympa pour la relecture d'avoir plein de commits, mais 0001 et 0005 pourraient disparaître et être mis dans les commits qui cassent les-dits tests, ça aide aussi à la compréhension de ce qui est recherché dans ces commits je trouve.

#7

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

Valentin Deniaud a écrit :

Dans 0002,
[...]
Chacun sa logique mais moi ça m'a demandé trop de temps de cerveau, j'aurais écris ça juste à coup de and not ou juste à coup de not or, pas un mix des deux (ou encore avec any()).

C'est parce que c'est pas la bonne condition.

[...]
La première ligne ne sert à rien (et faire pareil pour email_qs plus bas tant qu'à faire, où l'affectation sert bien à quelque chose mais on peut s'en passer en faisant comme ça).

Si je l'enlève ça ne marche plus dans le cas app_settings.A2_USERNAME_IS_UNIQUE is True par contre j'ai fait pareil coté email, email_qs = qs.filter.... pour la symétrie.

Sinon de manière générale, j'aimerais que les tests ne soient pas cassés entre deux commits (coucou git rebase --exec). Dans le cas présent c'est sympa pour la relecture d'avoir plein de commits, mais 0001 et 0005 pourraient disparaître et être mis dans les commits qui cassent les-dits tests, ça aide aussi à la compréhension de ce qui est recherché dans ces commits je trouve.

C'est très bien que les tests cassent entre deux commits sinon on ne voit pas ce qui est réparé, c'est le principe d'un test, un test qui ne foire jamais ça ne teste rien. Sans la progression des commits je ne vois pas comment tu aurais pu comprendre 0005 (ça c'est assez con mais on y peut rien si les libs python3 ne sont pas adaptés à unicode, ça va vite devenir inutile) ou 0004, faut voir ce que ça casse pour comprendre ce que ça corrige.

C'est le seul truc que j'ai appris pendant mes 3 ans de thèse (c'est dire...), avant de corriger un truc on fait un test qui marche pas.

Branche à jour.

#8

Mis à jour par Valentin Deniaud il y a presque 4 ans

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

Benjamin Dauvergne a écrit :

avant de corriger un truc on fait un test qui marche pas.

Oui oui je parlais surtout de n'avoir que des commits verts dans master, pratique adoptée par certains projets.
Parallèlement, perso je trouve plus clair que le test cassé et le fix associé soient dans le même commit (dans ta suite de patch c'est dur de savoir qui répare quoi). Par exemple j'avoue que je n'ai pas compris ce qui cassait test_roles_widget dans les 5 patchs qui précèdent, alors que j'aurais sûrement compris si le fix avait été dans le commit qui casse.

OK quand ça sera vert.

#9

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 8dee69122427c2ba687d8e5e867ba7cf2e32fc5c
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 23:03:15 2020 +0200

    tests: work around bytes/str usage in webtest (#43074)

    webtest only support byte string as GET parameters with python2.

commit f3f837439b7087c5c9dd00509070bec7476d6990
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 12:27:53 2020 +0200

    misc: simplify ValidatedEmailField (#43074)

commit bee7491f482d2fdec15bfa0edaa8656555a3c4e0
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 17:29:39 2020 +0200

    manager: set created user's OU in clean() (#43074)

    Any modification to the model should be done trough clean() method, as
    it enables later checks like uniqueness validation. No instance
    initialization should ever be done in save() methods unless it's
    garanteed that it cannot mess with validation.

commit d37e8f0d5dcd6cff50cf58fd195188f4dd41998e
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 17:28:40 2020 +0200

    misc: let User model validate identifiers and uniqueness (#43074)

commit 018e276c07f4e3d71e66e40575c2db8c9eda6383
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 12:24:38 2020 +0200

    misc: validate emails in Model.clean (#43074)

commit ab69544f6c117431ba6d742bf1ce9c889874c58c
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue May 19 12:24:50 2020 +0200

    tests: add tests on user creation trough manager (#43074)
#10

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

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

Formats disponibles : Atom PDF