nanterre: améliorer la gestion des erreurs dans les appels de WS à SAGA (fixes #18701)

* si pas 200, erreur, retourner un extrait du contenu
* si pas XML, erreur, retourner un extrait du contenu
* ne plus logger dans soap_call mais compter sur api_views.py pour le faire
  (c'est d'ailleurs fait)
This commit is contained in:
Benjamin Dauvergne 2017-09-14 12:38:17 +02:00
parent 5590604b38
commit 7dafbc6382
2 changed files with 17 additions and 17 deletions

View File

@ -231,7 +231,7 @@ def test_tiers_saga(app, settings, nanterre_classic_family):
}
)
assert response.json['err'] == 1
assert response.json['errors'] == [u'Ça va pas du tout']
assert response.json['errors'] == [u'SAGA erreur: Ça va pas du tout']
response = app.post_json(
reverse('rsu-api-saga-retour-asynchrone'),
@ -240,4 +240,4 @@ def test_tiers_saga(app, settings, nanterre_classic_family):
}
)
assert response.json['err'] == 1
assert response.json['errors'] == [u'Ça va pas du tout']
assert response.json['errors'] == [u'SAGA erreur: Ça va pas du tout']

View File

@ -69,17 +69,23 @@ class Saga(object):
'SOAPAction': "'\"'\"",
})
except requests.RequestException as e:
logging.getLogger(__name__).warning('impossible de contacter SAGA', exc_info=True)
return None, unicode(repr(e))
et = ET.fromstring(response.text)
return None, u'SAGA connexion impossible: %r' % e
if response.status_code != 200:
return None, u'SAGA response is not 200: %s %r' % (response.status_code,
response.content[:1024])
try:
et = ET.fromstring(response.content)
except:
return None, u'SAGA invalid XML content: %r' % response.content[:1024]
content_node = et.find('.//{%s}%s' % (self.ns, content_tag))
if content_node is None:
return None, 'no content node'
return None, u'SAGA no content node: %r' % response.content[:1024]
# pluging XML inside XML is so stupid :(
tree = ET.fromstring(content_node.text.encode('utf-8'))
if tree.tag == 'erreur':
return None, tree.text
return None, u'SAGA erreur: %s' % tree.text
return tree, None
@ -94,7 +100,7 @@ class Saga(object):
return None, error
if tree.tag != 'code_tiers_federe':
return None, 'no code_tiers_federe node'
return None, u'SAGA no code_tiers_federe node: %r' % ET.tostring(tree)
return tree.text, None
def get_child_content(self, tree, child_name):
@ -191,7 +197,7 @@ class Saga(object):
return None, error
if tree.tag != 'url':
return None, 'tag is not url'
return None, u'SAGA tag is not url: %r' % ET.tostring(tree)
return tree.text, None
@ -206,11 +212,8 @@ class Saga(object):
if tree is None:
return None, error
if tree.tag == 'erreur':
return None, tree.text
if tree.tag != 'ok':
return None, 'tag is not ok'
return None, u'SAGA tag is not ok: %r' % ET.tostring(tree)
result = {
'code_tiers': tree.attrib.get('code_tiers'),
'etat': tree.attrib['etat'],
@ -234,11 +237,8 @@ class Saga(object):
if tree is None:
return None, error
if tree.tag == 'erreur':
return None, tree.text
if tree.tag != 'ok':
return None, 'tag is not ok'
return None, u'SAGA tag is not ok: %r' % ET.tostring(tree)
result = {
'code_tiers': tree.attrib.get('code_tiers'),
'etat': tree.attrib['etat'],