base_adresse: return 200 on connection error (#52006)
This commit is contained in:
parent
5e68865fdd
commit
12440ac62b
|
@ -2,6 +2,7 @@ import datetime
|
|||
import gzip
|
||||
|
||||
from requests import RequestException
|
||||
from requests.exceptions import ConnectionError
|
||||
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from django.db import connection, models
|
||||
|
@ -147,11 +148,11 @@ class BaseAdresse(BaseResource):
|
|||
query = urlencode(query_args)
|
||||
url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
|
||||
|
||||
result_response = self.requests.get(url)
|
||||
try:
|
||||
result_response = self.requests.get(url)
|
||||
result_response.raise_for_status()
|
||||
except RequestException as e:
|
||||
raise APIError('Bad response code from API: %s' % e)
|
||||
raise APIError('failed to get %s: %s' % (url, e))
|
||||
|
||||
result = []
|
||||
|
||||
|
@ -211,11 +212,11 @@ class BaseAdresse(BaseResource):
|
|||
query = urlencode({'lat': lat, 'lon': lon})
|
||||
url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
|
||||
|
||||
result_response = self.requests.get(url)
|
||||
try:
|
||||
result_response = self.requests.get(url)
|
||||
result_response.raise_for_status()
|
||||
except RequestException as e:
|
||||
raise APIError('Bad response code from API: %s' % e)
|
||||
raise APIError('failed to get %s: %s' % (url, e))
|
||||
result = None
|
||||
|
||||
for feature in result_response.json().get('features'):
|
||||
|
@ -403,11 +404,14 @@ class BaseAdresse(BaseResource):
|
|||
departments.add(zipcode[:2])
|
||||
|
||||
for department in departments:
|
||||
ban_gz = self.requests.get(
|
||||
'https://adresse.data.gouv.fr/data/ban/adresses/latest/addok/adresses-addok-{}.ndjson.gz'.format(
|
||||
department
|
||||
try:
|
||||
ban_gz = self.requests.get(
|
||||
'https://adresse.data.gouv.fr/data/ban/adresses/latest/addok/adresses-addok-{}.ndjson.gz'.format(
|
||||
department
|
||||
)
|
||||
)
|
||||
)
|
||||
except RequestException as e:
|
||||
continue
|
||||
if ban_gz.status_code != 200:
|
||||
continue
|
||||
|
||||
|
|
|
@ -247,6 +247,19 @@ def test_base_adresse_search_api_error(mocked_get, app, base_adresse):
|
|||
assert resp.json['err'] == 1
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_base_adresse_search_api_timeout(mocked_get, app, base_adresse):
|
||||
mocked_get.side_effect = ConnectionError('Remote end closed connection without response')
|
||||
resp = app.get('/base-adresse/%s/search' % base_adresse.slug, params={'q': 'plop'})
|
||||
|
||||
assert resp.status_code == 200
|
||||
assert resp.json['err'] == 1
|
||||
assert (
|
||||
resp.json['err_desc']
|
||||
== 'failed to get https://api-adresse.data.gouv.fr/search/?q=plop&limit=1: Remote end closed connection without response'
|
||||
)
|
||||
|
||||
|
||||
def test_base_adresse_reverse(app, base_adresse, mock_api_adresse_data_gouv_fr_reverse):
|
||||
resp = app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
|
||||
data = resp.json
|
||||
|
@ -293,6 +306,19 @@ def test_base_adresse_reverse_path(mocked_get, app, base_adresse):
|
|||
assert mocked_get.call_args[0][0].startswith('http://example.net/path/reverse/?')
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_base_adresse_reverse_api_timeout(mocked_get, app, base_adresse):
|
||||
mocked_get.side_effect = ConnectionError('Remote end closed connection without response')
|
||||
resp = app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
|
||||
|
||||
assert resp.status_code == 200
|
||||
assert resp.json['err'] == 1
|
||||
assert (
|
||||
resp.json['err_desc']
|
||||
== 'failed to get https://api-adresse.data.gouv.fr/reverse/?lat=47.474633&lon=-0.593775: Remote end closed connection without response'
|
||||
)
|
||||
|
||||
|
||||
def test_base_adresse_streets_unaccent(app, base_adresse, street):
|
||||
resp = app.get('/base-adresse/%s/streets?q=une rue tres acc' % base_adresse.slug)
|
||||
data = json.loads(resp.text)
|
||||
|
@ -745,6 +771,14 @@ def test_base_adresse_command_update_geo_invalid(mocked_get, db, base_adresse):
|
|||
assert not RegionModel.objects.exists()
|
||||
|
||||
|
||||
@pytest.mark.usefixtures('mock_update_api_geo')
|
||||
@mock.patch('passerelle.utils.Request.get', side_effect=ConnectionError)
|
||||
def test_base_adresse_command_update_street_timeout(mocked_get, db, base_adresse):
|
||||
resp = call_command('cron', 'daily')
|
||||
assert mocked_get.call_count == 1
|
||||
assert not RegionModel.objects.exists()
|
||||
|
||||
|
||||
@pytest.mark.usefixtures('mock_update_streets')
|
||||
@mock.patch('passerelle.utils.Request.get', side_effect=ConnectionError)
|
||||
def test_base_adresse_command_update_geo_no_connection(mocked_get, db, base_adresse):
|
||||
|
|
Loading…
Reference in New Issue