photon: return api error on invalid photon responses (#76191) #174
|
@ -149,9 +149,13 @@ class Photon(BaseResource):
|
|||
except RequestException as e:
|
||||
raise APIError('failed to get %s: %s' % (url, e))
|
||||
|
||||
result = []
|
||||
try:
|
||||
response_json = result_response.json()
|
||||
except ValueError:
|
||||
raise APIError('invalid photon response (%r)' % result_response.content[:1024])
|
||||
|
||||
for feature in result_response.json().get('features'):
|
||||
result = []
|
||||
for feature in response_json.get('features'):
|
||||
if not feature['geometry']['type'] == 'Point':
|
||||
continue # skip unknown
|
||||
if zipcode and feature['properties'].get('postcode') != zipcode:
|
||||
|
@ -207,9 +211,14 @@ class Photon(BaseResource):
|
|||
result_response.raise_for_status()
|
||||
except RequestException as e:
|
||||
raise APIError('failed to get %s: %s' % (url, e))
|
||||
result = None
|
||||
|
||||
for feature in result_response.json().get('features'):
|
||||
try:
|
||||
response_json = result_response.json()
|
||||
except ValueError:
|
||||
raise APIError('invalid photon response (%r)' % result_response.content[:1024])
|
||||
|
||||
result = None
|
||||
for feature in response_json.get('features'):
|
||||
if not feature['geometry']['type'] == 'Point':
|
||||
continue # skip unknown
|
||||
result = self.format_address_data(feature)
|
||||
|
|
|
@ -319,3 +319,17 @@ def test_photon_reverse_cache(app, photon, freezer, mock_photon_reverse, mock_ph
|
|||
resp = app.get('/photon/%s/reverse?lon=4.8522272&lat=45.7587414' % photon.slug)
|
||||
assert mock_photon_reverse.call['count'] == 2
|
||||
assert AddressCacheModel.objects.get().timestamp > first_timestamp
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_photon_non_json(mocked_get, app, photon):
|
||||
response = tests.utils.FakedResponse(content=b'xxx', status_code=200)
|
||||
mocked_get.return_value = response
|
||||
|
||||
resp = app.get('/photon/%s/search' % photon.slug, params={'q': 'plop'}, status=200)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == "invalid photon response (b'xxx')"
|
||||
|
||||
resp = app.get('/photon/%s/reverse' % photon.slug, params={'lat': '0', 'lon': '0'}, status=200)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == "invalid photon response (b'xxx')"
|
||||
|
|
Loading…
Reference in New Issue