Bug #57742
api agendas : erreur 500
0%
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
Révisions associées
Historique
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus de 2 ans
- Fichier 0001-api-manage-optional-parameters-57742.patch 0001-api-manage-optional-parameters-57742.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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.
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)
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 » ?
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.
Mis à jour par Valentin Deniaud il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
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)
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
api: manage optional parameters (#57742)