diff --git a/WazeRouteCalculator/WazeRouteCalculator.py b/WazeRouteCalculator/WazeRouteCalculator.py index b91feda..8f0d018 100644 --- a/WazeRouteCalculator/WazeRouteCalculator.py +++ b/WazeRouteCalculator/WazeRouteCalculator.py @@ -34,6 +34,12 @@ class WazeRouteCalculator(object): 'IL': 'il-SearchServer/mozi', 'AU': 'row-SearchServer/mozi' } + ROUTING_SERVERS = { + 'US': 'RoutingManager/routingRequest', + 'EU': 'row-RoutingManager/routingRequest', + 'IL': 'il-RoutingManager/routingRequest', + 'AU': 'row-RoutingManager/routingRequest' + } COORD_MATCH = re.compile('^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(\s*)(([-+]?)([\d]{1,3})((\.)(\d+))?)$') def __init__(self, start_address, end_address, region='EU', vehicle_type='', log_lvl=logging.INFO): @@ -109,9 +115,8 @@ def address_to_coords(self, address): def get_route(self, npaths=1, time_delta=0): """Get route data from waze""" - routing_servers = ["row-RoutingManager/routingRequest", - "RoutingManager/routingRequest", - "il-RoutingManager/routingRequest"] + routing_server = self.ROUTING_SERVERS[self.region] + url_options = { "from": "x:%s y:%s" % (self.start_coords["lon"], self.start_coords["lat"]), "to": "x:%s y:%s" % (self.end_coords["lon"], self.end_coords["lat"]), @@ -126,18 +131,18 @@ def get_route(self, npaths=1, time_delta=0): if self.vehicle_type: url_options["vehicleType"] = self.vehicle_type - for routing_srv in routing_servers: - response = requests.get(self.WAZE_URL + routing_srv, params=url_options, headers=self.HEADERS) - response.encoding = 'utf-8' - response_json = self._check_response(response) - if response_json and 'error' not in response_json: + response = requests.get(self.WAZE_URL + routing_server, params=url_options, headers=self.HEADERS) + response.encoding = 'utf-8' + response_json = self._check_response(response) + if response_json: + if 'error' in response_json: + raise WRCError(response_json.get("error")) + else: if response_json.get("alternatives"): return [alt['response'] for alt in response_json['alternatives']] if npaths > 1: return [response_json['response']] return response_json['response'] - if response_json and 'error' not in response_json: - raise WRCError(response_json.get("error")) else: raise WRCError("empty response") @@ -196,4 +201,4 @@ def calc_all_routes_info(self, npaths=3, real_time=True, stop_at_bounds=False, t route_time = [route[0] for route in results.values()] route_distance = [route[1] for route in results.values()] self.log.info('Time %.2f - %.2f minutes, distance %.2f - %.2f km.', min(route_time), max(route_time), min(route_distance), max(route_distance)) - return results \ No newline at end of file + return results diff --git a/tests.py b/tests.py index d0ad6b2..4f21ae5 100644 --- a/tests.py +++ b/tests.py @@ -77,9 +77,9 @@ def test_get_route(self): assert self.routing_req in m.request_history[2].url def test_get_route_next_server(self): - fail_routing_req = self.waze_url + "row-RoutingManager/routingRequest" + fail_routing_req = self.waze_url + "RoutingManager/routingRequest" fail_routing_response = '{}' - ok_routing_req = self.waze_url + "RoutingManager/routingRequest" + ok_routing_req = self.waze_url + "row-RoutingManager/routingRequest" ok_routing_response = '{"response":{"results":[{"length":%s,"crossTime":%s}]}}' % (self.length, self.time) with requests_mock.mock() as m: m.get(self.address_req, text=self.address_to_coords_response)