Compare commits

...

5 Commits

Author SHA1 Message Date
Mario de Frutos
39c54f3e0c Merge pull request #464 from CartoDB/development
Release 0.16.7
2018-02-13 13:26:44 +01:00
Mario de Frutos
54e40645fa Update NEWS.md 2018-02-13 11:51:06 +01:00
Mario de Frutos
a86b8e86f9 Merge pull request #462 from CartoDB/Fixing_mapbox_request_errors
Fixed Mapbox requests and responses
2018-02-13 11:46:45 +01:00
Antonio
8674dabeb2 Version bumped 2018-02-13 08:38:54 +01:00
Antonio
080a386b8f Fixed mapbox requests and responses 2018-02-12 18:02:37 +01:00
5 changed files with 29 additions and 7 deletions

View File

@@ -1,3 +1,10 @@
February 13th, 2018
==================
* Version `0.16.7` of the python library
* Pick the first result when Mapbox geocoder returns multiple results #462
* Normalize input for Mapbox geocoder #462
February 12th, 2018
==================
* Version `0.16.6` of the python library

View File

@@ -8,6 +8,7 @@ from mapbox import Geocoder
from cartodb_services.metrics import Traceable
from cartodb_services.tools.exceptions import ServiceException
from cartodb_services.tools.qps import qps_retry
from cartodb_services.tools.normalize import normalize
GEOCODER_NAME = 'geocoder_name'
EPHEMERAL_GEOCODER = 'mapbox.places'
@@ -39,10 +40,16 @@ class MapboxGeocoder(Traceable):
def _parse_geocoder_response(self, response):
json_response = json.loads(response)
if json_response and json_response[ENTRY_FEATURES]:
feature = json_response[ENTRY_FEATURES][0]
# If Mapbox returns more that one result, take the first one
if json_response:
if type(json_response) == list:
json_response = json_response[0]
return self._extract_lng_lat_from_feature(feature)
if json_response[ENTRY_FEATURES]:
feature = json_response[ENTRY_FEATURES][0]
return self._extract_lng_lat_from_feature(feature)
else:
return []
else:
return []
@@ -61,11 +68,11 @@ class MapboxGeocoder(Traceable):
def geocode(self, searchtext, city=None, state_province=None,
country=None):
if searchtext and searchtext.strip():
address = [searchtext]
address = [normalize(searchtext)]
if city:
address.append(city)
address.append(normalize(city))
if state_province:
address.append(state_province)
address.append(normalize(state_province))
else:
return []

View File

@@ -0,0 +1,3 @@
def normalize(str_input):
return str_input.replace('"', '"') \
.replace(';', ',')

View File

@@ -10,7 +10,7 @@ from setuptools import setup, find_packages
setup(
name='cartodb_services',
version='0.16.6',
version='0.16.7',
description='CartoDB Services API Python Library',

View File

@@ -35,6 +35,11 @@ class MapboxGeocoderTestCase(unittest.TestCase):
assert place
def test_odd_characters(self):
place = self.geocoder.geocode(searchtext='Barcelona; "Spain"')
assert place
def test_empty_request(self):
place = self.geocoder.geocode(searchtext='', country=None, city=None, state_province=None)