Bug #11058
to_json() ne doit pas tracer pour l'exception PermissionDenied, DoesNotExist ou Http404
0%
Description
- PermissionDenied: Il faut renvoyer un 403 (ça je pense que c'est déjà le cas), logger un warning et c'est tout.
- DoesNotExist: renvoyer 404, logger en warning 'object not found' + la classe du modèle (je ne sais pas si on a d'autres détails dans l'exception à part ça)
- Http404: juste renvoyer 404, on log rien (si il y a un raise Http404 c'est que c'est prévu)
Fichiers
Révisions associées
Historique
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 8 ans
- Fichier 0001-jsonresponse-don-t-log-exceptions-for-Http404-Permis.patch 0001-jsonresponse-don-t-log-exceptions-for-Http404-Permis.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a presque 8 ans
emacs a retiré un espace de fin de ligne qui dans mon souvenir est important.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 8 ans
- Fichier 0001-jsonresponse-don-t-log-exceptions-for-Http404-Permis.patch 0001-jsonresponse-don-t-log-exceptions-for-Http404-Permis.patch ajouté
Remis
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
- logger.warning('object not found: %r', e.__class__, extra=extras) + logger.warning('object not found: %s', e, extra=extras)
'%r' % e.__class__
ça va juste donner <type 'DoesNotExist'>
, '%s' % e
ça devrait donner <Model> matching query does not exist.
.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 8 ans
Benjamin Dauvergne a écrit :
'%r' % e.__class__
ça va juste donner<type 'DoesNotExist'>
,'%s' % e
ça devrait donner<Model> matching query does not exist.
.
Normalement toutes les vues qu'on fait sont des CBV, basées sur GenericDetailView par exemple, qui pour retrouvent un objet font appel à get_object_or_404
. En cas d'object non-trouvé c'est une exception Http404
et non <model>.DoesNotExist
qui est levée.
Les endroits ou on raise explicitement ObjectDoesNotExist
sont les connecteurs agoraplus et fake_family, et ceci non sur la récupration d'un objet de la base.
Donc dans les logs on obtiendrait plutôt des messages du style:
adult "13366" not found in a family
ou
'unknown login'
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 8 ans
- Statut changé de En cours à Résolu (à déployer)
commit 3c80c165afb6fdbbdc43a8d5ac7748d9249a4326 Author: Serghei Mihai <smihai@entrouvert.com> Date: Thu May 26 13:55:44 2016 +0200 jsonresponse: don't log exceptions for Http404, PermissionDenied and ObjectDoesnotExist (#11058)
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
C'est dommage d'avoir détourné ObjectDoesNotExist, Http404 aurait suffi, mais ok.
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
Celui ne va pas être pris en compte par ce patch et pourtant il est chiant aussi:
Error occurred while processing request¶ Traceback (most recent call last):¶ File "/usr/lib/python2.7/dist-packages/passerelle/utils/jsonresponse.py", line 349, in api¶ resp = f(*args, **kwargs)¶ File "/usr/lib/python2.7/dist-packages/passerelle/contrib/iparapheur/views.py", line 76, in get¶ return self.get_data(request, *args, **kwargs)¶ File "/usr/lib/python2.7/dist-packages/passerelle/contrib/iparapheur/views.py", line 138, in get_data¶ return self.get_object().get_file_status(kwargs['file_id'])¶ File "/usr/lib/python2.7/dist-packages/passerelle/contrib/iparapheur/models.py", line 123, in get_file_status¶ raise FileError(resp.MessageRetour.message)¶ FileError: Le dossierID '37fb2d75-36fa-4bd3-8701-0cd533ecafba' est inconnu dans le Parapheur.¶ ¶ Request repr(): unavailable¶
On pourrait remplacer le FileError par un Http404 ? Si oui j'ouvre un autre ticket.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 8 ans
Voilà, c'est fait: #11074
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 7 ans
- Statut changé de Résolu (à déployer) à Fermé
jsonresponse: don't log exceptions for Http404, PermissionDenied and ObjectDoesnotExist (#11058)