Bug #32454
régression liée à la vérification des champs pour les recettes de déploiement
0%
Description
régression suite à #31384
hobo/environment/management/commands/cook.py:
- obj.clean() + obj.full_clean()
mis en évidence par (nouveau test introduit par #16599 mais pas encore lancé par tox -> my bad) :
$ DJANGO_SETTINGS_MODULE=hobo.settings HOBO_SETTINGS_FILE=tests_schemas/settings.py py.test tests_schemas/test_cook.py::test_cook CommandError: {...[u'This field cannot be blank.'],
Il s'agit du champ template_name qui est devenu (a tord) obligatoire :
{"create-authentic": { "url": "https://${domain}/", "title": "Connexion" }},
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a environ 5 ans
- Statut changé de Nouveau à En cours
Mince, je n'ai pas compris le message d'erreur, le problème est sur d'autres champs.
ValidationError: { 'last_operational_success_timestamp': [u'This field cannot be blank.'], 'last_operational_check_timestamp': [u'This field cannot be blank.']}
Mis à jour par Nicolas Roche il y a environ 5 ans
la trace complète :
_________________________________________________________________________________ test_cook _________________________________________________________________________________ db = None, fake_notify = {}, monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fcc78c59390> def test_cook(db, fake_notify, monkeypatch): monkeypatch.setattr(ServiceBase, 'is_resolvable', lambda x: True) monkeypatch.setattr(ServiceBase, 'has_valid_certificate', lambda x: True) > call_command('cook', 'tests_schemas/recipe.json') tests_schemas/test_cook.py:12: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../../envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py:131: in call_command return command.execute(*args, **defaults) ../../envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py:330: in execute output = self.handle(*args, **options) hobo/environment/management/commands/cook.py:62: in handle self.run_cook(recipe) hobo/environment/management/commands/cook.py:86: in run_cook getattr(self, action.replace('-', '_'))(**action_args) hobo/environment/management/commands/cook.py:205: in create_authentic return self.create_site(Authentic, url, title, slug, template_name, variables) hobo/environment/management/commands/cook.py:177: in create_site obj.full_clean() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <Authentic: Authentic object>, exclude = ['last_operational_success_timestamp', 'last_operational_check_timestamp'], validate_unique = True def full_clean(self, exclude=None, validate_unique=True): """ Calls clean_fields, clean, and validate_unique, on the model, and raises a ``ValidationError`` for any errors that occurred. """ import pdb; pdb.set_trace() > errors = {} E ValidationError: {'last_operational_success_timestamp': [u'This field cannot be blank.'], 'last_operational_check_timestamp': [u'This field cannot be blank.']} ../../envs/publik-env/local/lib/python2.7/site-packages/django/db/models/base.py:1222: ValidationError
Mis à jour par Christophe Siraut il y a environ 5 ans
- Assigné à changé de Nicolas Roche à Christophe Siraut
Ma faute, 9f715b356 est mauvais/insuffisant: parce qu'on a pas envie de spécifier ces champs dans nos fichiers json.
Mis à jour par Christophe Siraut il y a environ 5 ans
- Fichier 0001-environment-models-regression-fix-allow-ServiceBase-.patch 0001-environment-models-regression-fix-allow-ServiceBase-.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
En posant blank=True sur les 2 champs concernés, la validation clean_fields() s'exécute correctement.
Mis à jour par Emmanuel Cazenave il y a environ 5 ans
On a la convention d'éviter les regresion fix
ou 'enhancement' dans les messages de commit (parce c'est toujours fix ou enhancement donc on ne le répète pas partout).
Mis à jour par Thomas Noël il y a environ 5 ans
(il manque une migration)
Mais c'est pas terrible je trouve, parce qu'on teste dans le code des choses comme "if self.last_operational_check_timestamp is None:" et je me demande si le blank=True va pas permettre des choses imprévues.
En fait, se servir d'une validation de formulaire c'est sans doute pas la bonne méthode à utiliser ici...?
Mis à jour par Thomas Noël il y a environ 5 ans
https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model.full_clean :
* Model.full_clean(exclude=None, validate_unique=True) The optional exclude argument can be used to provide a list of field names that can be excluded from validation and cleaning.
Ca serait sans doute mieux d'explicitement exclure les champs qui n'ont pas à être validés ?
Mis à jour par Christophe Siraut il y a environ 5 ans
- Fichier 0001-environment-models-enable-ServiceBase-validation-whe.patch 0001-environment-models-enable-ServiceBase-validation-whe.patch ajouté
Ok pour l'exclusion explicite.
Est-ce qu'un blank=True modifie quelque chose en base?
Mis à jour par Thomas Noël il y a environ 5 ans
- Statut changé de Solution proposée à Solution validée
Christophe Siraut a écrit :
Ok pour l'exclusion explicite.
Ack ainsi.
Est-ce qu'un blank=True modifie quelque chose en base?
Je sais pas, peut-être sur certains SGBD... dans le doute, faut ajouter une migration, je pense.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Lié à Bug #32468: nouvel environnement tox ajouté
Mis à jour par Christophe Siraut il y a environ 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 9924c83c5f4a6d28c9b99a85cd694e70c384c5e9 (HEAD -> master) Author: Christophe Siraut <csiraut@entrouvert.com> Date: Thu Apr 18 17:07:22 2019 +0200 environment: enable ServiceBase validation when performing cook (#32454)
Mis à jour par Nicolas Roche il y a environ 5 ans
- Sujet changé de champ 'template_name' devenu obligatoire dans les recettes de déploiement à régression liée à la vérification des champs pour les recettes de déploiement
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Thomas Noël a écrit :
Est-ce qu'un blank=True modifie quelque chose en base?
Je sais pas, peut-être sur certains SGBD... dans le doute, faut ajouter une migration, je pense.
Ça ne modifie rien ça ne concerne que la validation via ModelForm à ma connaissance, contrairement à null=True, on peut simplement l'ajouter à la dernière migration qui a touché ces champs.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Il faut faire comme dit Thomas; dans la mesure où on utilise une API pas faite pour ça (ModelForm s'occupe je pense de passer dans exclude les champs non présent dans un formulaire) c'est à nous de l'appeler correctement.
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
environment: enable ServiceBase validation when performing cook (#32454)