base_adresse: PEP8ness, code style (#30458)

This commit is contained in:
Benjamin Dauvergne 2019-02-08 08:00:10 +01:00
parent 5e23162573
commit 43b837172b
2 changed files with 56 additions and 11 deletions

View File

@ -1,10 +1,11 @@
import bz2
import json
import os
import urllib
import urlparse
import unicodedata
import six
from django.db import connection, models
from django.db.models import Q
from django.utils.http import urlencode
@ -24,7 +25,9 @@ class BaseAdresse(BaseResource):
category = _('Geographic information system')
zipcode = models.CharField(max_length=600, blank=True,
zipcode = models.CharField(
max_length=600,
blank=True,
verbose_name=_('Postal codes or county number to get streets, separated with commas'))
class Meta:
@ -158,7 +161,8 @@ class BaseAdresse(BaseResource):
departments.add(zipcode[:2])
for department in departments:
ban_file = self.requests.get('http://bano.openstreetmap.fr/BAN_odbl/BAN_odbl_{}-json.bz2'.format(department))
ban_file = self.requests.get(
'http://bano.openstreetmap.fr/BAN_odbl/BAN_odbl_{}-json.bz2'.format(department))
if ban_file.status_code != 200:
continue
@ -166,9 +170,9 @@ class BaseAdresse(BaseResource):
street_info = json.loads(line)
if street_info['type'] == 'street' and street_info['postcode'].startswith(zipcodes):
if type(street_info['citycode']) is list:
street_info['citycode'] = unicode(street_info['citycode'][0])
street_info['citycode'] = six.text_type(street_info['citycode'][0])
if type(street_info['name']) is list:
street_info['name'] = unicode(street_info['name'][0])
street_info['name'] = six.text_type(street_info['name'][0])
street = StreetModel.objects.get_or_create(citycode=street_info['citycode'],
name=street_info['name'][:150])
street[0].city = street_info['city']
@ -205,7 +209,7 @@ class StreetModel(models.Model):
ordering = ['unaccent_name', 'name']
def __unicode__(self):
return unicode(self.name)
return self.name
def save(self, *args, **kwargs):
self.unaccent_name = unicodedata.normalize('NFKD', self.name).encode('ascii', 'ignore')

View File

@ -10,32 +10,61 @@ from django.core.management import call_command
from passerelle.apps.base_adresse.models import BaseAdresse, StreetModel
from passerelle.views import WrongParameter
FAKED_CONTENT = '{"limit": 1, "attribution": "BAN", "version": "draft", "licence": "ODbL 1.0", "query": "plop", "type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [-0.593775, 47.474633]}, "properties": {"citycode": "49007", "name": "Rue Roger Halope", "id": "49007_6950_be54bd", "city": "Angers", "context": "49, Maine-et-Loire, Pays de la Loire", "score": 0.14097272727272728, "label": "Rue Roger Halope 49000 Angers", "postcode": "49000", "type": "street"}, "type": "Feature"}]}'
FAKED_CONTENT = json.dumps({
"limit": 1,
"attribution": "BAN",
"version": "draft",
"licence": "ODbL 1.0",
"query": "plop",
"type": "FeatureCollection",
"features": [
{
"geometry": {
"type": "Point",
"coordinates": [-0.593775, 47.474633]
},
"properties": {
"citycode": "49007",
"name": "Rue Roger Halope",
"id": "49007_6950_be54bd",
"city": "Angers",
"context": "49, Maine-et-Loire, Pays de la Loire",
"score": 0.14097272727272728,
"label": "Rue Roger Halope 49000 Angers",
"postcode": "49000",
"type": "street"
},
"type": "Feature"
}
]
})
FAKE_DATA = ''
@pytest.fixture
def base_adresse(db):
return utils.setup_access_rights(BaseAdresse.objects.create(slug='base-adresse', zipcode='73'))
@pytest.fixture
def base_adresse_97x(db):
return utils.setup_access_rights(BaseAdresse.objects.create(slug='base-adresse',
zipcode='97425'))
@pytest.fixture
def base_adresse_corsica(db):
return utils.setup_access_rights(BaseAdresse.objects.create(slug='base-adresse',
zipcode='20000, 20100 '))
@pytest.fixture
def base_adresse_multiple(db):
return utils.setup_access_rights(BaseAdresse.objects.create(slug='base-adresse',
zipcode='73, 73100, 97425,20000 '))
@pytest.fixture
def street(db):
return StreetModel.objects.create(city=u'Chambéry',
@ -44,6 +73,7 @@ def street(db):
type=u'street',
citycode=u'73001')
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_search(mocked_get, app, base_adresse):
endpoint = utils.generic_endpoint_url('base-adresse', 'search', slug=base_adresse.slug)
@ -55,6 +85,7 @@ def test_base_adresse_search(mocked_get, app, base_adresse):
assert data['lon'] == '-0.593775'
assert data['display_name'] == 'Rue Roger Halope 49000 Angers'
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_search_path(mocked_get, app, base_adresse):
base_adresse.service_url = 'http://example.net/path/'
@ -68,6 +99,7 @@ def test_base_adresse_search_path(mocked_get, app, base_adresse):
assert data['lon'] == '-0.593775'
assert data['display_name'] == 'Rue Roger Halope 49000 Angers'
def test_base_adresse_search_qs(app, base_adresse, mock_api_adresse_data_gouv_fr_search):
resp = app.get('/base-adresse/%s/search?q=plop' % base_adresse.slug)
assert 'display_name' in resp.json[0]
@ -77,10 +109,12 @@ def test_base_adresse_search_qs_zipcode(app, base_adresse, mock_api_adresse_data
resp = app.get('/base-adresse/%s/search?q=plop&zipcode=49000' % base_adresse.slug)
assert 'display_name' in resp.json[0]
def test_base_adresse_search_qs_empty(app, base_adresse, mock_api_adresse_data_gouv_fr_search):
resp = app.get('/base-adresse/%s/search?q=' % base_adresse.slug)
assert len(resp.json) == 0
def test_base_adresse_search_qs_parameters_error(app, base_adresse,
mock_api_adresse_data_gouv_fr_search):
resp = app.get('/base-adresse/%s/search' % base_adresse.slug, status=400)
@ -105,14 +139,16 @@ def test_base_adresse_reverse(app, base_adresse, mock_api_adresse_data_gouv_fr_r
assert data['address']['postcode'] == '49000'
assert data['address']['citycode'] == '49007'
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_reverse_path(mocked_get, app, base_adresse):
mocked_get.return_value = utils.FakedResponse(content=json.dumps({'features': []}), status_code=200)
base_adresse.service_url = 'http://example.net/path/'
base_adresse.save()
resp = app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
assert mocked_get.call_args[0][0].startswith('http://example.net/path/reverse/?')
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.body)
@ -124,6 +160,7 @@ def test_base_adresse_streets_unaccent(app, base_adresse, street):
assert result['zipcode'] == street.zipcode
assert result['id'] == street.id
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update(mocked_get, db, base_adresse):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')
@ -142,6 +179,7 @@ def test_base_adresse_command_update(mocked_get, db, base_adresse):
call_command('cron', 'daily')
mocked_get.call_count == 2
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_hourly_update(mocked_get, db, base_adresse):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')
@ -154,6 +192,7 @@ def test_base_adresse_command_hourly_update(mocked_get, db, base_adresse):
call_command('cron', 'hourly')
mocked_get.call_count == 1
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update_97x(mocked_get, db, base_adresse_97x):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')
@ -162,6 +201,7 @@ def test_base_adresse_command_update_97x(mocked_get, db, base_adresse_97x):
mocked_get.assert_called_once_with('http://bano.openstreetmap.fr/BAN_odbl/BAN_odbl_974-json.bz2')
assert StreetModel.objects.count() == 2
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update_corsica(mocked_get, db, base_adresse_corsica):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')
@ -172,6 +212,7 @@ def test_base_adresse_command_update_corsica(mocked_get, db, base_adresse_corsic
mocked_get.assert_any_call('http://bano.openstreetmap.fr/BAN_odbl/BAN_odbl_2B-json.bz2')
assert StreetModel.objects.count() == 0
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update_multiple(mocked_get, db, base_adresse_multiple):
filepath = os.path.join(os.path.dirname(__file__), 'data', 'update_streets_test.bz2')