esabora: return error content in response (#71368)
This commit is contained in:
parent
cd46dc8d97
commit
56b6baea78
|
@ -72,7 +72,7 @@ class Esabora(BaseResource, HTTPResource):
|
||||||
url = urllib.parse.urljoin(self.service_url, path)
|
url = urllib.parse.urljoin(self.service_url, path)
|
||||||
headers = {'Authorization': f'Bearer {self.api_key}'}
|
headers = {'Authorization': f'Bearer {self.api_key}'}
|
||||||
try:
|
try:
|
||||||
return self.requests.post(url, json=payload, headers=headers, timeout=5, **kwargs)
|
response = self.requests.post(url, json=payload, headers=headers, timeout=5, **kwargs)
|
||||||
except requests.RequestException as e:
|
except requests.RequestException as e:
|
||||||
raise APIError(
|
raise APIError(
|
||||||
'Esabora platform "%s" connection error: %s' % (self.service_url, exception_to_text(e)),
|
'Esabora platform "%s" connection error: %s' % (self.service_url, exception_to_text(e)),
|
||||||
|
@ -83,6 +83,26 @@ class Esabora(BaseResource, HTTPResource):
|
||||||
'error': str(e),
|
'error': str(e),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
data = response.json()
|
||||||
|
except requests.JSONDecodeError as e:
|
||||||
|
raise APIError(
|
||||||
|
'Esabora platform "%s" invalid JSON response: %s' % (self.service_url, exception_to_text(e)),
|
||||||
|
log_error=True,
|
||||||
|
data={
|
||||||
|
'status_code': response.status_code,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if not response.ok:
|
||||||
|
raise APIError(
|
||||||
|
'Esabora platform "%s" answered with HTTP error' % (self.service_url),
|
||||||
|
log_error=True,
|
||||||
|
data={
|
||||||
|
'status_code': response.status_code,
|
||||||
|
'content': data,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
@endpoint(
|
@endpoint(
|
||||||
name='do-search',
|
name='do-search',
|
||||||
|
@ -100,9 +120,7 @@ class Esabora(BaseResource, HTTPResource):
|
||||||
for name, value in post_data['criterions'].items()
|
for name, value in post_data['criterions'].items()
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
response = self.post('mult/', payload, params={'task': 'doSearch'})
|
data = self.post('mult/', payload, params={'task': 'doSearch'})
|
||||||
response.raise_for_status()
|
|
||||||
data = response.json()
|
|
||||||
columns = {slugify(c).replace('-', '_'): c for c in data['columnList']}
|
columns = {slugify(c).replace('-', '_'): c for c in data['columnList']}
|
||||||
keys = {slugify(c).replace('-', '_'): c for c in data['keyList']}
|
keys = {slugify(c).replace('-', '_'): c for c in data['keyList']}
|
||||||
cleaned_data = {
|
cleaned_data = {
|
||||||
|
@ -130,9 +148,7 @@ class Esabora(BaseResource, HTTPResource):
|
||||||
endpoint = post_data.pop('endpoint', None) or 'modbdd'
|
endpoint = post_data.pop('endpoint', None) or 'modbdd'
|
||||||
payload = get_treatment_payload(post_data)
|
payload = get_treatment_payload(post_data)
|
||||||
|
|
||||||
response = self.post(f'{endpoint}/', payload, params={'task': 'doTreatment'})
|
data = self.post(f'{endpoint}/', payload, params={'task': 'doTreatment'})
|
||||||
response.raise_for_status()
|
|
||||||
data = response.json()
|
|
||||||
keys = [slugify(c).replace('-', '_') for c in data['keyList']]
|
keys = [slugify(c).replace('-', '_') for c in data['keyList']]
|
||||||
cleaned_data = esabora_row_to_object([], keys, data)
|
cleaned_data = esabora_row_to_object([], keys, data)
|
||||||
cleaned_data['action'] = data['action']
|
cleaned_data['action'] = data['action']
|
||||||
|
|
|
@ -245,3 +245,31 @@ def test_do_treatment_arbitrary_endpoint(app, connector):
|
||||||
assert responses.calls[0].request.params['task'] == 'doTreatment'
|
assert responses.calls[0].request.params['task'] == 'doTreatment'
|
||||||
response_data = json.loads(responses.calls[0].request.body)
|
response_data = json.loads(responses.calls[0].request.body)
|
||||||
assert response_data == expected_payload
|
assert response_data == expected_payload
|
||||||
|
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_post_raises_proper_error(app, connector):
|
||||||
|
url = tests.utils.generic_endpoint_url('esabora', 'do-treatment')
|
||||||
|
responses.add(
|
||||||
|
responses.POST,
|
||||||
|
f'{connector.service_url}addevt/',
|
||||||
|
json={'foo': 'bar'},
|
||||||
|
status=400,
|
||||||
|
)
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
'endpoint': 'addevt',
|
||||||
|
'treatment_name': 'Import Event',
|
||||||
|
'Adresse_Latitude': 12.3,
|
||||||
|
'Adresse_Ville': 'Marseille',
|
||||||
|
}
|
||||||
|
|
||||||
|
expected_response = {
|
||||||
|
'err': 1,
|
||||||
|
'err_class': 'passerelle.utils.jsonresponse.APIError',
|
||||||
|
'data': {'content': {'foo': 'bar'}, 'status_code': 400},
|
||||||
|
'err_desc': 'Esabora platform "http://example.esabora/ws/rest/" answered with HTTP error',
|
||||||
|
}
|
||||||
|
|
||||||
|
response = app.post_json(url, params=payload)
|
||||||
|
assert response.json == expected_response
|
||||||
|
|
Loading…
Reference in New Issue