base_adresse: don't clear streets if file is empty (#20308)

This commit is contained in:
Lauréline Guérin 2019-10-08 11:11:57 +02:00
parent 8bbae6f2c4
commit e3d3ba295a
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 20 additions and 0 deletions

View File

@ -176,6 +176,7 @@ class BaseAdresse(BaseResource):
if ban_file.status_code != 200:
continue
line = _not_found = object()
for line in bz2.decompress(ban_file.content).splitlines():
street_info = json.loads(line)
if street_info['type'] == 'street' and street_info['postcode'].startswith(zipcodes):
@ -191,6 +192,8 @@ class BaseAdresse(BaseResource):
street[0].type = street_info['type']
street[0].citycode = street_info['citycode']
street[0].save()
if line is _not_found:
raise Exception('bano file is empty')
self.get_streets_queryset().filter(last_update__lt=start_update).delete()

View File

@ -17,6 +17,7 @@ def test_jobs(mocked_get, app, base_adresse, freezer):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')
mocked_get.return_value = utils.FakedResponse(content=open(filepath).read(), status_code=200)
freezer.move_to('2019-01-01 00:00:00')
job = base_adresse.add_job('update_streets_data')
assert job.status == 'registered'
@ -24,6 +25,22 @@ def test_jobs(mocked_get, app, base_adresse, freezer):
assert Job.objects.get(id=job.id).status == 'completed'
assert StreetModel.objects.count() == 3
# don't delete streets if bano file is empty
mocked_get.return_value = utils.FakedResponse(content='', status_code=200)
freezer.move_to('2019-01-01 12:00:00')
job = base_adresse.add_job('update_streets_data')
assert job.status == 'registered'
base_adresse.jobs()
assert Job.objects.get(id=job.id).status == 'failed'
assert Job.objects.get(id=job.id).status_details == {'error_summary': 'Exception: bano file is empty'}
assert ResourceLog.objects.all().count() == 1
assert ResourceLog.objects.all()[0].message == (
'error running update_streets_data job (bano file is empty)')
assert StreetModel.objects.count() == 3
mocked_get.return_value = utils.FakedResponse(content=open(filepath).read(), status_code=200)
StreetModel.objects.all().delete()
ResourceLog.objects.all().delete()