Add service configuration (URL, etc) for Here Routing

This commit is contained in:
Javier Goizueta
2017-03-02 17:55:08 +01:00
parent 677d2acead
commit c0374f5800
2 changed files with 27 additions and 5 deletions
@@ -30,12 +30,17 @@ class HereMapsRoutingIsoline(Traceable):
'quality' 'quality'
] ]
def __init__(self, app_id, app_code, logger, def __init__(self, app_id, app_code, logger, service_params={}):
base_url=PRODUCTION_ROUTING_BASE_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._url = "{0}{1}".format(base_url, self.ISOLINE_PATH) base_url = service_params.get('base_url', self.PRODUCTION_ROUTING_BASE_URL)
isoline_path = service_params.get('isoline_path', self.ISOLINE_PATH)
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)
self._url = "{0}{1}".format(base_url, isoline_path)
def calculate_isodistance(self, source, mode, data_range, options=[]): def calculate_isodistance(self, source, mode, data_range, options=[]):
return self.__calculate_isolines(source, mode, data_range, 'distance', return self.__calculate_isolines(source, mode, data_range, 'distance',
@@ -57,9 +62,9 @@ class HereMapsRoutingIsoline(Traceable):
parsed_options) parsed_options)
# TODO Extract HTTP client wrapper # TODO Extract HTTP client wrapper
session = requests.Session() session = requests.Session()
session.mount(self._url, HTTPAdapter(max_retries=self.MAX_RETRIES)) session.mount(self._url, HTTPAdapter(max_retries=self.max_retries))
response = requests.get(self._url, params=request_params, response = requests.get(self._url, 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 self.__parse_isolines_response(response.text) return self.__parse_isolines_response(response.text)
@@ -212,3 +212,20 @@ class HereMapsRoutingIsolineTestCase(unittest.TestCase):
parsed_url = urlparse(req_mock.request_history[0].url) parsed_url = urlparse(req_mock.request_history[0].url)
url_params = parse_qs(parsed_url.query) url_params = parse_qs(parsed_url.query)
self.assertEqual(url_params['destination'][0], 'geo!33.0,1.0') self.assertEqual(url_params['destination'][0], 'geo!33.0,1.0')
def test_isodistance_with_nonstandard_url(self, req_mock):
base_url = 'http://nonstandard_base'
url = "{0}{1}".format(base_url, HereMapsRoutingIsoline.ISOLINE_PATH)
routing = HereMapsRoutingIsoline(None, None, Mock(), { 'base_url': base_url })
req_mock.register_uri('GET', url, text=self.GOOD_RESPONSE)
response = routing.calculate_isodistance('geo!33.0,1.0', 'car',
['1000', '2000'])
self.assertEqual(len(response), 2)
self.assertEqual(response[0]['range'], 1000)
self.assertEqual(response[1]['range'], 2000)
self.assertEqual(response[0]['geom'], [u'32.9699707,0.9462833',
u'32.9699707,0.9458542',
u'32.9699707,0.9462833'])
self.assertEqual(response[1]['geom'], [u'32.9699707,0.9462833',
u'32.9699707,0.9750366',
u'32.9699707,0.9462833'])