solis: handle json response in self.request (#21737)
This commit is contained in:
parent
717de86286
commit
d0e89d2301
|
@ -82,16 +82,19 @@ class Solis(BaseResource):
|
|||
class Meta:
|
||||
verbose_name = _('Solis')
|
||||
|
||||
def request(self, endpoint, data=None):
|
||||
def request(self, endpoint, data=None, response_is_json=True):
|
||||
url = self.service_url + endpoint
|
||||
headers = {'Accept': 'application/json'}
|
||||
if data is None:
|
||||
return self.requests.get(url, headers=headers)
|
||||
return self.requests.post(url, json=data, headers=headers)
|
||||
response = self.requests.get(url, headers=headers)
|
||||
else:
|
||||
response = self.requests.post(url, json=data, headers=headers)
|
||||
|
||||
def get_json(self, endpoint):
|
||||
response = self.request(endpoint)
|
||||
if response.status_code != 200:
|
||||
if response.status_code // 100 != 2:
|
||||
if not response_is_json:
|
||||
raise APIError('error status:%s %r, content:%r' %
|
||||
(response.status_code, response.reason, response.content[:1024]),
|
||||
data={'status_code': response.status_code})
|
||||
try:
|
||||
json_content = response.json()
|
||||
except ValueError:
|
||||
|
@ -100,6 +103,9 @@ class Solis(BaseResource):
|
|||
(response.status_code, response.reason, response.content[:1024]),
|
||||
data={'status_code': response.status_code,
|
||||
'json_content': json_content})
|
||||
|
||||
if not response_is_json:
|
||||
return response.content
|
||||
try:
|
||||
return response.json()
|
||||
except ValueError:
|
||||
|
@ -108,19 +114,18 @@ class Solis(BaseResource):
|
|||
def check_status(self):
|
||||
# just raise an exception if something goes wrong
|
||||
pong = self.request('main/isAlive')
|
||||
pong.raise_for_status()
|
||||
if not pong.json().get('response').startswith('Solis API'):
|
||||
if not pong.get('response').startswith('Solis API'):
|
||||
raise Exception('bad main/isAlive response body')
|
||||
|
||||
@endpoint(name='ping', description=_('Check Solis API availability'))
|
||||
def ping(self, request):
|
||||
pong = self.get_json('main/isAlive')
|
||||
pong = self.request('main/isAlive')
|
||||
try:
|
||||
response = pong['response'] or 'empty'
|
||||
except (TypeError, KeyError):
|
||||
raise APIError('invalid response: %r' % pong.content[:1024])
|
||||
raise APIError('invalid response: %r' % pong)
|
||||
if not response.startswith('Solis API'):
|
||||
raise APIError('response is %s' % response)
|
||||
raise APIError('response is %s' % response, data=pong)
|
||||
return {'data': 'pong', 'response': response}
|
||||
|
||||
def apa_token(self, user_id, code):
|
||||
|
@ -128,12 +133,7 @@ class Solis(BaseResource):
|
|||
'indexIndividu': user_id,
|
||||
'codeConfidentiel': code,
|
||||
})
|
||||
if response.status_code == 403:
|
||||
raise APIError('invalid credentials')
|
||||
elif response.status_code != 200:
|
||||
raise APIError('error status:%s %r, content:%r' %
|
||||
(response.status_code, response.reason, response.content[:1024]))
|
||||
return response.json().get('token')
|
||||
return response.get('token')
|
||||
|
||||
def apa_get_information(self, information, user_id=None, code=None, token=None, index=None):
|
||||
if token is None:
|
||||
|
@ -141,7 +141,7 @@ class Solis(BaseResource):
|
|||
endpoint = 'asg/apa/' + information + '/' + token
|
||||
if index:
|
||||
endpoint += '/' + index
|
||||
return self.get_json(endpoint)
|
||||
return self.request(endpoint)
|
||||
|
||||
@endpoint(name='apa-link', methods=['post'], perm='can_access',
|
||||
description=_('Create link between name_id and '
|
||||
|
@ -295,7 +295,7 @@ class Solis(BaseResource):
|
|||
if args:
|
||||
endpoint += '?' + urlencode(args)
|
||||
|
||||
content = self.get_json(endpoint)
|
||||
content = self.request(endpoint)
|
||||
|
||||
if (not isinstance(content, dict) or len(content) != 1 or
|
||||
not isinstance(content.values()[0], list)):
|
||||
|
|
|
@ -159,7 +159,7 @@ def test_solis_link_infos_unlink(app, solis):
|
|||
assert requests_post.call_count == 1
|
||||
assert requests_get.call_count == 0
|
||||
assert resp.json['err'] == 1
|
||||
assert 'invalid credentials' in resp.json['err_desc']
|
||||
assert 'Code confidentiel non valide' in resp.json['err_desc']
|
||||
|
||||
assert SolisAPALink.objects.count() == 0
|
||||
|
||||
|
|
Loading…
Reference in New Issue