solis: improve response in case of solis error (#21476)

This commit is contained in:
Thomas NOËL 2018-02-01 14:01:10 +01:00
parent 349ccad78c
commit d3fddffb60
2 changed files with 21 additions and 8 deletions

View File

@ -82,12 +82,12 @@ class Solis(BaseResource):
def ping(self, request):
pong = self.request('main/isAlive')
if pong.status_code != 200:
raise APIError('error status:%s, content:%r' %
(pong.status_code, pong.content))
raise APIError('error status:%s %r, content:%r' %
(pong.status_code, pong.reason, pong.content[:1024]))
try:
response = pong.json().get('response') or ''
except (ValueError, AttributeError):
raise APIError('invalid response: %r' % pong.content)
raise APIError('invalid response: %r' % pong.content[:1024])
if not response.startswith('Solis API'):
raise APIError('response is %s' % response)
return {'data': 'pong', 'response': response}
@ -100,8 +100,8 @@ class Solis(BaseResource):
if response.status_code == 403:
raise APIError('invalid credentials')
elif response.status_code != 200:
raise APIError('error status:%s, content:%r' %
(response.status_code, response.content))
raise APIError('error status:%s %r, content:%r' %
(response.status_code, response.reason, response.content[:1024]))
return response.json().get('token')
def apa_get_information(self, information, user_id=None, code=None, token=None, index=None):
@ -112,8 +112,14 @@ class Solis(BaseResource):
endpoint += '/' + index
response = self.request(endpoint)
if response.status_code != 200:
raise APIError('error status:%s, content:%r' %
(response.status_code, response.content))
try:
json_content = response.json()
except ValueError:
json_content = None
raise APIError('error status:%s %r, content:%r' %
(response.status_code, response.reason, response.content[:1024]),
data={'status_code': response.status_code,
'json_content': json_content})
return response.json()
@endpoint(name='apa-link', methods=['post'], perm='can_access',

View File

@ -264,8 +264,15 @@ def test_solis_link_infos_unlink(app, solis):
assert requests_get.call_count == 2 # get informations
assert ('/asg/apa/%s' % apa_endpoint) in requests_get.call_args[0][0]
assert resp.json['err'] == 1
assert not resp.json['data']
assert resp.json['err_desc'].startswith('error status:500')
assert resp.json['data'] == {'json_content': None, 'status_code': 500}
requests_get.return_value = utils.FakedResponse(content='{"error":"foobar"}',
status_code=500)
resp = app.get(endpoint, status=200)
assert resp.json['err'] == 1
assert resp.json['err_desc'].startswith('error status:500')
assert resp.json['data'] == {'json_content': {'error': 'foobar'}, 'status_code': 500}
# unknown name_id or user_id
for qs in ('name_id=%s&user_id=XXX' % NAMEID, 'name_id=unlinked&user_id=53'):