arcgis: return every elements of a layer (#13156)

This commit is contained in:
Josue Kouka 2016-09-12 12:20:08 +02:00
parent b09e27d9c8
commit d858c8aa64
3 changed files with 155 additions and 16 deletions

View File

@ -38,17 +38,23 @@ class Arcgis(BaseResource):
return 'gis'
@endpoint(serializer_type='json-api')
def district(self, request, lon, lat):
try:
lon, lat = float(lon), float(lat)
except(ValueError,):
raise ParameterTypeError('<lon> and <lat> must be floats')
def district(self, request, lon=None, lat=None):
if lon and lat:
try:
lon, lat = float(lon), float(lat)
geometry = '{}, {}'.format(lon, lat)
geometryType = 'esriGeometryPoint'
except(ValueError,):
raise ParameterTypeError('<lon> and <lat> must be floats')
else:
geometry = ''
geometryType = 'esriGeometryEnvelope'
params = {
'where': '1=1',
'f': 'pjson',
'geometry': '{}, {}'.format(lon, lat),
'geometryType': 'esriGeometryPoint',
'geometry': geometry,
'geometryType': geometryType,
'inSR': '4326',
'outFields': '*',
'outSR': '4326',
@ -67,9 +73,11 @@ class Arcgis(BaseResource):
response = self.requests.get(url, params=params)
data = response.json()
data = data['features'][0]['attributes']
features = data['features']
return {
'id': data.get('NUMERO'),
'name': data.get('NOM')
}
data = [
{'id': feature['attributes'].get('NUMERO'), 'name': feature['attributes'].get('NOM')} for feature in features]
if len(data) == 1:
return data[0]
return data

View File

@ -0,0 +1,124 @@
{
"features": [
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": 5306,
"NOM": "PLATEAU DE HAYE",
"NUMERO": 1,
"OBJECTID": 7,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": null,
"NOM": "RIVES DE MEURTHE",
"NUMERO": 6,
"OBJECTID": 1,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": null,
"NOM": "SAINT NICOLAS / CHARLES III / VIEILLE VILLE / TROIS MAISONS/ LEOPOLD",
"NUMERO": 7,
"OBJECTID": 2,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": 14000,
"NOM": "SAINT PIERRE / RENE II / BONSECOURS",
"NUMERO": 5,
"OBJECTID": 3,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": 24139,
"NOM": "HAUSSONVILLE / BLANDAN / MON DESERT / SAURUPT",
"NUMERO": 4,
"OBJECTID": 4,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": 18870,
"NOM": "POINCARE / FOCH / ANATOLE FRANCE / CROIX DE BOURGOGNE",
"NUMERO": 3,
"OBJECTID": 5,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
},
{
"attributes": {
"CCOCOM": "395",
"DATE_MAJ": 1433116800000,
"NBRE_HAB": 12665,
"NOM": "BEAUREGARD / BOUFFLERS / BUTHEGNEMONT / BOUDONVILLE",
"NUMERO": 2,
"OBJECTID": 6,
"SOURCE_NBRE_HAB": "VILLE DE NANCY"
}
}
],
"fields": [
{
"alias": "OBJECTID",
"name": "OBJECTID",
"type": "esriFieldTypeOID"
},
{
"alias": "CCOCOM",
"length": 3,
"name": "CCOCOM",
"type": "esriFieldTypeString"
},
{
"alias": "NOM",
"length": 100,
"name": "NOM",
"type": "esriFieldTypeString"
},
{
"alias": "NUMERO",
"name": "NUMERO",
"type": "esriFieldTypeSmallInteger"
},
{
"alias": "NBRE_HAB",
"name": "NBRE_HAB",
"type": "esriFieldTypeSmallInteger"
},
{
"alias": "SOURCE_NBRE_HAB",
"length": 50,
"name": "SOURCE_NBRE_HAB",
"type": "esriFieldTypeString"
},
{
"alias": "DATE_MAJ",
"length": 36,
"name": "DATE_MAJ",
"type": "esriFieldTypeDate"
}
],
"globalIdFieldName": "",
"objectIdFieldName": "OBJECTID"
}

View File

@ -43,10 +43,6 @@ def url():
'connector': 'arcgis', 'slug': 'test', 'endpoint': 'district'})
def test_get_district_without_parameters(app, setup, url):
app.get(url, {}, status=400)
def test_get_district_parameters_error(app, setup, url):
resp = app.get(url, {'lon': 'lon', 'lat': 'lat'}, status=400)
assert resp.json['err_desc'] == '<lon> and <lat> must be floats'
@ -62,3 +58,14 @@ def test_get_district(mocked_get, app, setup, url):
data = resp.json['data']
assert data['id'] == 4
assert data['name'] == 'HAUSSONVILLE / BLANDAN / MON DESERT / SAURUPT'
@mock.patch('passerelle.utils.LoggedRequest.get')
def test_get_all_district(mocked_get, app, setup, url):
mocked_get.return_value = MockedRequestsResponse(
content=get_file_content('all_districts.json'),
status_code=200)
resp = app.get(url, status=200)
data = resp.json['data']
assert len(data) == 7