Project

General

Profile

Bug #57742

api agendas : erreur 500

Added by Nicolas Roche about 2 months ago. Updated about 1 month ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
11 Oct 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Files

Associated revisions

Revision 3b702012 (diff)
Added by Nicolas Roche about 1 month ago

api: manage optional parameters (#57742)

History

#1

Updated by Nicolas Roche about 2 months ago

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

Updated by Frédéric Péters (absent jusqu’au 12/12) about 2 months ago

Vérifier la version de djangorestframework.

#3

Updated by Nicolas Roche about 2 months ago

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

Updated by Valentin Deniaud about 2 months ago

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

Updated by Nicolas Roche about 2 months ago

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

Updated by Valentin Deniaud about 1 month ago

  • Status changed from Solution proposée to Solution validée
#7

Updated by Nicolas Roche about 1 month ago

  • Status changed from Solution validée to 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

Updated by Frédéric Péters (absent jusqu’au 12/12) about 1 month ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF