Sentry nous rapporte qu'en faisant une requête HEAD sur la route /api/membres/, on obtient une erreur 500 :
TypeError: 'NoneType' object is not callable
[...]
File "zds/member/api/views.py", line 115, in get
return self.list(request, *args, **kwargs)
File "rest_framework/mixins.py", line 42, in list
serializer = self.get_serializer(page, many=True)
File "rest_framework/generics.py", line 110, in get_serializer
return serializer_class(*args, **kwargs)
Je ne sais pas comment traiter ce problème. Est-ce qu'il faut interdire toutes les requêtes HEAD ? Dans ce cas y a-t-il quelque part un paramètre qui permet de faire ça pour toute l'API ? (je ne suis même pas sûr que ce soit souhaitable...) Est-ce qu'il faut simplement traiter le cas si la requête est de type HEAD dans get_serializer_class() ? Dans ce cas quelle donnée on renvoie ?
Si on fait une requête HEAD sur la route qui donne les infos d'un membre en particulier, on n'obtient pas une 500, mais une belle 200 OK...
Description du bug
Sentry nous rapporte qu'en faisant une requête
HEAD
sur la route/api/membres/
, on obtient une erreur 500 :De ce que j'ai compris, ça vient du fait que la méthode
get_serializer_class()
ne renvoie rien (doncNone
) si la requête n'est pasGET
ouPOST
: https://github.com/zestedesavoir/zds-site/blob/738f5772ced7d18be8e29a9f05180c3ccaea272c/zds/member/api/views.py#L138-L142Comment reproduire ?
Comportement attendu
Pas une erreur 500.
Je ne sais pas comment traiter ce problème. Est-ce qu'il faut interdire toutes les requêtes
HEAD
? Dans ce cas y a-t-il quelque part un paramètre qui permet de faire ça pour toute l'API ? (je ne suis même pas sûr que ce soit souhaitable...) Est-ce qu'il faut simplement traiter le cas si la requête est de typeHEAD
dansget_serializer_class()
? Dans ce cas quelle donnée on renvoie ?Si on fait une requête
HEAD
sur la route qui donne les infos d'un membre en particulier, on n'obtient pas une 500, mais une belle200 OK
...