Bug #20809
wscall: AttributeError: 'Response' object has no attribute 'status'
0%
Description
Exception: type = '<type 'exceptions.AttributeError'>', value = ''Response' object has no attribute 'status'' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/wcs/wf/wscall.py", line 367, in action_on_error 365 summary = '' 366 if response: > 367 summary = '%s %s' % (response.status, response.reason) 368 try: 369 raise Exception(summary) locals: formdata = <...> summary = '' self = <wcs.wf.wscall.WebserviceCallStatusItem object at 0x7f458d8f8e90> action = ':pass' exc_info = None data = '{"reason":"already cancelled","err":1}' response = <Response [200]>
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 6 ans
On ne l'aurait pas vu parce que le FakeResponse dans tests/utilities.py n'a pas les attributs d'une réponse quixote (status à la place de status_code, reason à la place de reason_phrase, data à la place de body, etc) ?
Mis à jour par Thomas Noël il y a plus de 6 ans
POC (je continuerai ce soir éventuellement)
diff --git a/tests/utilities.py b/tests/utilities.py index db3e859c..d88451f8 100644 --- a/tests/utilities.py +++ b/tests/utilities.py @@ -290,8 +290,8 @@ class HttpRequestsMocking(object): class FakeResponse(object): def __init__(self, status, data, headers): - self.status = status - self.reason = 'whatever' + self.status_code = status + self.reason_phrase = 'whatever' self.data = data self.headers = headers or {} self.length = len(data or '')
Crash du test :
wcs/wf/wscall.py:317: in perform self.action_on_error(self.action_on_app_error, formdata, response, data=data) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <wcs.wf.wscall.WebserviceCallStatusItem object at 0x7f366491d250>, action = ':stop', formdata = <Baz 'baz #1-1' id:1> response = <utilities.FakeResponse object at 0x7f366491d110>, data = '{"data": "", "err": 1}', exc_info = None def action_on_error(self, action, formdata, response=None, data=None, exc_info=None): if action in (':pass', ':stop') and (self.notify_on_errors or self.record_errors): if exc_info: summary = traceback.format_exception_only(exc_info[0], exc_info[1])[-1] else: summary = '' if response: > summary = '%s %s' % (response.status, response.reason) E AttributeError: 'FakeResponse' object has no attribute 'status' wcs/wf/wscall.py:367: AttributeError
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Ce serait vraiment difficile de refaire quelque chose à base de httmock ? J'avoue je n'ai pas bien regardé les différences.
Mis à jour par Thomas Noël il y a plus de 6 ans
- Fichier 0001-wscall-fix-record-notify-on-application-errors-20809.patch 0001-wscall-fix-record-notify-on-application-errors-20809.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Benjamin Dauvergne a écrit :
Ce serait vraiment difficile de refaire quelque chose à base de httmock ? J'avoue je n'ai pas bien regardé les différences.
Sans doute qu'on pourrait revoir le principe des tests pour y éviter de mocker comme utils::HttpRequestsMocking. Mais dans cette attente, voici un patch qui corrige le code, et qui corrige le test (qui plante sans la correction du code).
Mis à jour par Frédéric Péters il y a plus de 6 ans
De requests, j'obtiens les attributs status_code (bien) mais aussi reason (et pas reason_phrase). (tu écris "réponse quixote" mais à cet endroit c'est une réponse de python-requests).
~~
Sans doute qu'on pourrait revoir le principe des tests
Tout à fait.
Mis à jour par Thomas Noël il y a plus de 6 ans
- Fichier 0001-wscall-fix-record-notify-on-app-errors-use-status_co.patch 0001-wscall-fix-record-notify-on-app-errors-use-status_co.patch ajouté
Mélangeage de pinceau. Je propose quand même ce mini-patch qu'on peut voir comme un "hotfix", en attendant de revoir la façon de tester requests via quelque chose de plus bas niveau.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Ma remarque c'était surtout pour ne pas se retrouver avec une autre différence qui laisse passer des bugs à travers la requête mais ok aussi pour la correction actuelle.
Mis à jour par Thomas Noël il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit eb7a8abf9645274b9c5644c59753220f5e2c392e Author: Thomas NOEL <tnoel@entrouvert.com> Date: Wed Dec 20 01:14:32 2017 +0100 wscall: fix record/notify on app errors, use status_code instead of status (#20809)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
wscall: fix record/notify on app errors, use status_code instead of status (#20809)