Projet

Général

Profil

Bug #57742

api agendas : erreur 500

Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Catégorie:
-
Version cible:
-
Début:
11 octobre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

File "/usr/lib/python3/dist-packages/chrono/api/views.py" in post
  743.         if not serializer.is_valid():

File "/usr/lib/python3/dist-packages/rest_framework/serializers.py" in is_valid
  236.                 self._validated_data = self.run_validation(self.initial_data)

File "/usr/lib/python3/dist-packages/rest_framework/serializers.py" in run_validation
  437.             value = self.validate(value)

File "/usr/lib/python3/dist-packages/chrono/api/serializers.py" in validate
  195.         if attrs['minimal_booking_delay_in_working_days'] and attrs.get('kind', 'events') != 'events':

Exception Type: KeyError at /api/agenda/
Exception Value: 'minimal_booking_delay_in_working_days'
Request information:
USER: AnonymousUser

Fichiers

0001-api-manage-optional-parameters-57742.patch (1,27 ko) 0001-api-manage-optional-parameters-57742.patch Nicolas Roche (absent jusqu'au 3 avril), 11 octobre 2021 16:51

Révisions associées

Révision 3b702012 (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans

api: manage optional parameters (#57742)

Historique

#1

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans

Je n'arrive pas à reproduire l'erreur dans les tests, où

    minimal_booking_delay_in_working_days = models.BooleanField(
        _('Minimal booking delay in working days'),
        default=False,
    )

se traduit par un attribut positionné à False par défaut dans le serializer.

#2

Mis à jour par Frédéric Péters il y a plus de 2 ans

Vérifier la version de djangorestframework.

#3

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans

Ce n'était pas la même mais je ne reproduis pas non plus en 3.9

$ tox -e py3-django22-codestyle-coverage-pylint -- tests/api/test_all.py

sur le saas :

$ ssh combo.node1.test.saas.entrouvert.org
$ apt policy python3-djangorestframework
  Installé : 3.9.0-1

sur mon devinst

$ . /tmp/tox-nroche/chrono/py3-django22-codestyle-coverage-pylint/bin/activate
$ pip show djangorestframework
Version: 3.9.0

Ce test (déjà présent) devrait lever l'exception, il ne l'a pas fait non plus sur jenkins :

    # add an agenda using only required fields
    params = {
        'label': 'My Agenda',
        'slug': 'my-agenda',
    }
    resp = app.post(api_url, params=params)

#4

Mis à jour par Valentin Deniaud il y a plus de 2 ans

Bizarre ce comportement parce qu'on trouve aussi une vieille issue github où un dev dit qu'il ne faut surtout pas que le défaut du modèle devienne le défaut du serializer (https://github.com/encode/django-rest-framework/issues/4703).

Mais tant mieux parce que la condition était/est mal écrite, car elle n'empêche pas de passer ce paramètre du moment qu'il vaut False. Tu remplaces par un check à base de « in » ?

#5

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans

Tu remplaces par un check à base de « in » ?

Bof, je me dit que ça va casser les tests (où le paramètre est toujours présent).
Là l'idée c'est d'ignorer la valeur False introduite par défaut.

#6

Mis à jour par Valentin Deniaud il y a plus de 2 ans

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

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3b702012262c9fd9ca3d5804c7da1d8f855418b1
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Mon Oct 11 16:49:03 2021 +0200

    api: manage optional parameters (#57742)
#8

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

Formats disponibles : Atom PDF