parent
457858a490
commit
677d2acead
@ -88,7 +88,7 @@ RETURNS Geometry AS $$
|
|||||||
raise Exception('You have reached the limit of your quota')
|
raise Exception('You have reached the limit of your quota')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
geocoder = HereMapsGeocoder(user_geocoder_config.heremaps_app_id, user_geocoder_config.heremaps_app_code, logger)
|
geocoder = HereMapsGeocoder(user_geocoder_config.heremaps_app_id, user_geocoder_config.heremaps_app_code, logger, user_geocoder_config.heremaps_service_params)
|
||||||
coordinates = geocoder.geocode(searchtext=searchtext, city=city, state=state_province, country=country)
|
coordinates = geocoder.geocode(searchtext=searchtext, city=city, state=state_province, country=country)
|
||||||
if coordinates:
|
if coordinates:
|
||||||
quota_service.increment_success_service_use()
|
quota_service.increment_success_service_use()
|
||||||
|
@ -52,14 +52,17 @@ class HereMapsGeocoder(Traceable):
|
|||||||
'strictlanguagemode'
|
'strictlanguagemode'
|
||||||
] + ADDRESS_PARAMS
|
] + ADDRESS_PARAMS
|
||||||
|
|
||||||
def __init__(self, app_id, app_code, logger, maxresults=DEFAULT_MAXRESULTS,
|
def __init__(self, app_id, app_code, logger, service_params={}, maxresults=DEFAULT_MAXRESULTS):
|
||||||
gen=DEFAULT_GEN, host=PRODUCTION_GEOCODE_JSON_URL):
|
service_params = service_params or {}
|
||||||
self.app_id = app_id
|
self.app_id = app_id
|
||||||
self.app_code = app_code
|
self.app_code = app_code
|
||||||
self._logger = logger
|
self._logger = logger
|
||||||
self.maxresults = maxresults
|
self.maxresults = maxresults
|
||||||
self.gen = gen
|
self.gen = service_params.get('gen', self.DEFAULT_GEN)
|
||||||
self.host = host
|
self.host = service_params.get('json_url', self.PRODUCTION_GEOCODE_JSON_URL)
|
||||||
|
self.connect_timeout = service_params.get('connect_timeout', self.CONNECT_TIMEOUT)
|
||||||
|
self.read_timeout = service_params.get('read_timeout', self.READ_TIMEOUT)
|
||||||
|
self.max_retries = service_params.get('max_retries', self.MAX_RETRIES)
|
||||||
|
|
||||||
def geocode(self, **kwargs):
|
def geocode(self, **kwargs):
|
||||||
params = {}
|
params = {}
|
||||||
@ -92,9 +95,9 @@ class HereMapsGeocoder(Traceable):
|
|||||||
request_params.update(params)
|
request_params.update(params)
|
||||||
# TODO Extract HTTP client wrapper
|
# TODO Extract HTTP client wrapper
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
session.mount(self.host, HTTPAdapter(max_retries=self.MAX_RETRIES))
|
session.mount(self.host, HTTPAdapter(max_retries=self.max_retries))
|
||||||
response = session.get(self.host, params=request_params,
|
response = session.get(self.host, params=request_params,
|
||||||
timeout=(self.CONNECT_TIMEOUT, self.READ_TIMEOUT))
|
timeout=(self.connect_timeout, self.read_timeout))
|
||||||
self.add_response_data(response, self._logger)
|
self.add_response_data(response, self._logger)
|
||||||
if response.status_code == requests.codes.ok:
|
if response.status_code == requests.codes.ok:
|
||||||
return json.loads(response.text)
|
return json.loads(response.text)
|
||||||
|
@ -222,6 +222,7 @@ class IsolinesRoutingConfig(ServiceConfig):
|
|||||||
if self._isolines_provider == self.HEREMAPS_PROVIDER:
|
if self._isolines_provider == self.HEREMAPS_PROVIDER:
|
||||||
self._heremaps_app_id = db_config.heremaps_isolines_app_id
|
self._heremaps_app_id = db_config.heremaps_isolines_app_id
|
||||||
self._heremaps_app_code = db_config.heremaps_isolines_app_code
|
self._heremaps_app_code = db_config.heremaps_isolines_app_code
|
||||||
|
self._heremaps_service_params = db_config.heremaps_isolines_service_params
|
||||||
elif self._isolines_provider == self.MAPZEN_PROVIDER:
|
elif self._isolines_provider == self.MAPZEN_PROVIDER:
|
||||||
self._mapzen_matrix_api_key = self._db_config.mapzen_matrix_api_key
|
self._mapzen_matrix_api_key = self._db_config.mapzen_matrix_api_key
|
||||||
|
|
||||||
@ -256,6 +257,10 @@ class IsolinesRoutingConfig(ServiceConfig):
|
|||||||
def heremaps_app_code(self):
|
def heremaps_app_code(self):
|
||||||
return self._heremaps_app_code
|
return self._heremaps_app_code
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heremaps_service_params(self):
|
||||||
|
return self._heremaps_service_params
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mapzen_matrix_api_key(self):
|
def mapzen_matrix_api_key(self):
|
||||||
return self._mapzen_matrix_api_key
|
return self._mapzen_matrix_api_key
|
||||||
@ -368,6 +373,7 @@ class GeocoderConfig(ServiceConfig):
|
|||||||
self._heremaps_app_id = db_config.heremaps_geocoder_app_id
|
self._heremaps_app_id = db_config.heremaps_geocoder_app_id
|
||||||
self._heremaps_app_code = db_config.heremaps_geocoder_app_code
|
self._heremaps_app_code = db_config.heremaps_geocoder_app_code
|
||||||
self._cost_per_hit = db_config.heremaps_geocoder_cost_per_hit
|
self._cost_per_hit = db_config.heremaps_geocoder_cost_per_hit
|
||||||
|
self._heremaps_service_params = db_config.heremaps_geocoder_service_params
|
||||||
elif self._geocoder_provider == self.GOOGLE_GEOCODER:
|
elif self._geocoder_provider == self.GOOGLE_GEOCODER:
|
||||||
self._google_maps_api_key = filtered_config[self.GOOGLE_GEOCODER_API_KEY]
|
self._google_maps_api_key = filtered_config[self.GOOGLE_GEOCODER_API_KEY]
|
||||||
self._google_maps_client_id = filtered_config[self.GOOGLE_GEOCODER_CLIENT_ID]
|
self._google_maps_client_id = filtered_config[self.GOOGLE_GEOCODER_CLIENT_ID]
|
||||||
@ -428,6 +434,10 @@ class GeocoderConfig(ServiceConfig):
|
|||||||
def heremaps_app_code(self):
|
def heremaps_app_code(self):
|
||||||
return self._heremaps_app_code
|
return self._heremaps_app_code
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heremaps_service_params(self):
|
||||||
|
return self._heremaps_service_params
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mapzen_api_key(self):
|
def mapzen_api_key(self):
|
||||||
return self._mapzen_api_key
|
return self._mapzen_api_key
|
||||||
@ -444,6 +454,9 @@ class GeocoderConfig(ServiceConfig):
|
|||||||
def provider(self):
|
def provider(self):
|
||||||
return self._geocoder_provider
|
return self._geocoder_provider
|
||||||
|
|
||||||
|
@property
|
||||||
|
def service(self):
|
||||||
|
return self._service
|
||||||
|
|
||||||
class ServicesDBConfig:
|
class ServicesDBConfig:
|
||||||
|
|
||||||
@ -480,8 +493,10 @@ class ServicesDBConfig:
|
|||||||
self._heremaps_geocoder_app_code = heremaps_conf['geocoder']['app_code']
|
self._heremaps_geocoder_app_code = heremaps_conf['geocoder']['app_code']
|
||||||
self._heremaps_geocoder_cost_per_hit = heremaps_conf['geocoder'][
|
self._heremaps_geocoder_cost_per_hit = heremaps_conf['geocoder'][
|
||||||
'geocoder_cost_per_hit']
|
'geocoder_cost_per_hit']
|
||||||
|
self._heremaps_geocoder_service_params = heremaps_conf['geocoder'].get('service', {})
|
||||||
self._heremaps_isolines_app_id = heremaps_conf['isolines']['app_id']
|
self._heremaps_isolines_app_id = heremaps_conf['isolines']['app_id']
|
||||||
self._heremaps_isolines_app_code = heremaps_conf['isolines']['app_code']
|
self._heremaps_isolines_app_code = heremaps_conf['isolines']['app_code']
|
||||||
|
self._heremaps_isolines_service_params = heremaps_conf['isolines'].get('service', {})
|
||||||
|
|
||||||
def _get_mapzen_config(self):
|
def _get_mapzen_config(self):
|
||||||
mapzen_conf_json = self._get_conf('mapzen_conf')
|
mapzen_conf_json = self._get_conf('mapzen_conf')
|
||||||
@ -530,6 +545,10 @@ class ServicesDBConfig:
|
|||||||
def heremaps_isolines_app_code(self):
|
def heremaps_isolines_app_code(self):
|
||||||
return self._heremaps_isolines_app_code
|
return self._heremaps_isolines_app_code
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heremaps_isolines_service_params(self):
|
||||||
|
return self._heremaps_isolines_service_params
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def heremaps_geocoder_app_id(self):
|
def heremaps_geocoder_app_id(self):
|
||||||
return self._heremaps_geocoder_app_id
|
return self._heremaps_geocoder_app_id
|
||||||
@ -542,6 +561,10 @@ class ServicesDBConfig:
|
|||||||
def heremaps_geocoder_cost_per_hit(self):
|
def heremaps_geocoder_cost_per_hit(self):
|
||||||
return self._heremaps_geocoder_cost_per_hit
|
return self._heremaps_geocoder_cost_per_hit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heremaps_geocoder_service_params(self):
|
||||||
|
return self._heremaps_geocoder_service_params
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mapzen_matrix_api_key(self):
|
def mapzen_matrix_api_key(self):
|
||||||
return self._mapzen_matrix_api_key
|
return self._mapzen_matrix_api_key
|
||||||
|
@ -145,3 +145,17 @@ class HereMapsGeocoderTestCase(unittest.TestCase):
|
|||||||
searchtext='Calle amor de dios',
|
searchtext='Calle amor de dios',
|
||||||
city='Cordoba',
|
city='Cordoba',
|
||||||
country='España')
|
country='España')
|
||||||
|
|
||||||
|
def test_geocode_with_nonstandard_url(self, req_mock):
|
||||||
|
geocoder = HereMapsGeocoder(None, None, Mock(), { 'json_url': 'http://nonstandard_here_url' })
|
||||||
|
req_mock.register_uri('GET', 'http://nonstandard_here_url', text=self.GOOD_RESPONSE)
|
||||||
|
response = geocoder.geocode(
|
||||||
|
searchtext='Calle amor de dios',
|
||||||
|
city='Cordoba',
|
||||||
|
country='España')
|
||||||
|
|
||||||
|
self.assertEqual(response[0], -5.2794)
|
||||||
|
self.assertEqual(response[1], 37.70246)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user