arcgis: handle unusual error response (#69396)
This commit is contained in:
parent
233fc74f05
commit
dbf1736a5b
|
@ -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
|
||||
|
||||
|
|
|
@ -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 = [
|
||||
|
|
Loading…
Reference in New Issue