Projet

Général

Profil

Bug #32454

régression liée à la vérification des champs pour les recettes de déploiement

Ajouté par Nicolas Roche il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Catégorie:
agent
Version cible:
-
Début:
18 avril 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Hobo - Bug #32468: nouvel environnement toxFermé18 avril 2019

Actions

Révisions associées

Révision 9924c83c (diff)
Ajouté par Christophe Siraut il y a environ 5 ans

environment: enable ServiceBase validation when performing cook (#32454)

Historique

#1

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.']}

#2

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

#3

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.

#4

Mis à jour par Christophe Siraut il y a environ 5 ans

En posant blank=True sur les 2 champs concernés, la validation clean_fields() s'exécute correctement.

#5

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).

#6

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...?

#7

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 ?

#8

Mis à jour par Christophe Siraut il y a environ 5 ans

Ok pour l'exclusion explicite.

Est-ce qu'un blank=True modifie quelque chose en base?

#9

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.

#10

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

  • Lié à Bug #32468: nouvel environnement tox ajouté
#11

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

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
#13

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.

#14

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.

#15

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

Formats disponibles : Atom PDF