arcgis: handle unusual error response (#69396)

This commit is contained in:
Thomas NOËL 2022-09-22 11:57:43 +02:00
parent 233fc74f05
commit dbf1736a5b
2 changed files with 21 additions and 1 deletions

View File

@ -66,7 +66,10 @@ class ArcGIS(BaseResource, HTTPResource):
if not isinstance(response, dict):
raise ArcGISError('ArcGIS/%s not returned a dict: %r' % (query_type, response))
if 'error' in response:
err_desc = response['error'].get('message') or ('unknown ArcGIS/%s error' % query_type)
if not isinstance(response['error'], dict) or 'message' not in response['error']:
err_desc = 'unknown ArcGIS/%s error' % query_type
else:
err_desc = response['error']['message']
raise ArcGISError(err_desc, data=response)
return response

View File

@ -159,6 +159,12 @@ TOKEN = '''{
"token": "tok42"
}'''
ERRORS = [
({"error": {"message": "crash message"}}, 'crash message'),
({"error": {"foo": "bar"}}, 'unknown ArcGIS/token error'),
({"error": "string crash"}, 'unknown ArcGIS/token error'),
]
@pytest.fixture
def arcgis():
@ -638,6 +644,17 @@ def test_arcgis_with_token_query(app, arcgis):
assert resp.json['err'] == 1
assert resp.json['err_desc'].startswith('ArcGIS/token not returned a dict:')
for content, err_desc in ERRORS:
requests_get.reset_mock()
requests_get.side_effect = [
tests.utils.FakedResponse(content=json.dumps(content), status_code=200),
]
resp = app.get(endpoint, params=params, status=200)
assert requests_get.call_count == 1
assert requests_post.call_count == 0
assert resp.json['err'] == 1
assert resp.json['err_desc'] == err_desc
requests_get.reset_mock()
requests_post.reset_mock()
requests_get.side_effect = [