Check for some issues like empty input, recoverable exceptions, etc
This commit is contained in:
@@ -28,6 +28,11 @@ RETURNS cdb_dataservices_server.simple_route AS $$
|
|||||||
try:
|
try:
|
||||||
client = MapzenRouting(user_routing_config.mapzen_app_key)
|
client = MapzenRouting(user_routing_config.mapzen_app_key)
|
||||||
|
|
||||||
|
if not origin or not destination:
|
||||||
|
plpy.notice("Empty origin or destination")
|
||||||
|
quota_service.increment_empty_service_use()
|
||||||
|
return [None, None, None]
|
||||||
|
|
||||||
orig_lat = plpy.execute("SELECT ST_Y('%s') AS lat" % origin)[0]['lat']
|
orig_lat = plpy.execute("SELECT ST_Y('%s') AS lat" % origin)[0]['lat']
|
||||||
orig_lon = plpy.execute("SELECT ST_X('%s') AS lon" % origin)[0]['lon']
|
orig_lon = plpy.execute("SELECT ST_X('%s') AS lon" % origin)[0]['lon']
|
||||||
origin_coordinates = Coordinate(orig_lon, orig_lat)
|
origin_coordinates = Coordinate(orig_lon, orig_lat)
|
||||||
@@ -39,10 +44,15 @@ RETURNS cdb_dataservices_server.simple_route AS $$
|
|||||||
|
|
||||||
if resp and resp.shape:
|
if resp and resp.shape:
|
||||||
shape_linestring = polyline_to_linestring(resp.shape)
|
shape_linestring = polyline_to_linestring(resp.shape)
|
||||||
quota_service.increment_success_service_use()
|
if shape_linestring:
|
||||||
return [shape_linestring, resp.length, resp.duration]
|
quota_service.increment_success_service_use()
|
||||||
|
return [shape_linestring, resp.length, resp.duration]
|
||||||
|
else:
|
||||||
|
quota_service.increment_empty_service_use()
|
||||||
|
return [None, None, None]
|
||||||
else:
|
else:
|
||||||
quota_service.increment_empty_service_use()
|
quota_service.increment_empty_service_use()
|
||||||
|
return [None, None, None]
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
import sys, traceback
|
import sys, traceback
|
||||||
type_, value_, traceback_ = sys.exc_info()
|
type_, value_, traceback_ = sys.exc_info()
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ def polyline_to_linestring(polyline):
|
|||||||
coordinates.append("%s %s" % (point[1]/10, point[0]/10))
|
coordinates.append("%s %s" % (point[1]/10, point[0]/10))
|
||||||
wkt_coordinates = ','.join(coordinates)
|
wkt_coordinates = ','.join(coordinates)
|
||||||
|
|
||||||
sql = "SELECT ST_GeomFromText('LINESTRING({0})', 4326) as geom".format(wkt_coordinates)
|
try:
|
||||||
geometry = plpy.execute(sql, 1)[0]['geom']
|
sql = "SELECT ST_GeomFromText('LINESTRING({0})', 4326) as geom".format(wkt_coordinates)
|
||||||
|
geometry = plpy.execute(sql, 1)[0]['geom']
|
||||||
|
except BaseException as e:
|
||||||
|
plpy.warning("Can't generate LINESTRING from polyline: {0}".format(e))
|
||||||
|
geometry = None
|
||||||
|
|
||||||
return geometry
|
return geometry
|
||||||
|
|||||||
@@ -17,3 +17,5 @@ class Coordinate:
|
|||||||
def to_json(self):
|
def to_json(self):
|
||||||
return "{{\"lon\": {0},\"lat\": {1}}}".format(self._longitude,
|
return "{{\"lon\": {0},\"lat\": {1}}}".format(self._longitude,
|
||||||
self._latitude)
|
self._latitude)
|
||||||
|
def __str__(self):
|
||||||
|
return "{0}, {1}".format(self._longitude, self._latitude)
|
||||||
@@ -11,14 +11,11 @@ class PolyLine:
|
|||||||
for chunk in chunks:
|
for chunk in chunks:
|
||||||
coordinate = self._process_chunk(chunk)
|
coordinate = self._process_chunk(chunk)
|
||||||
coordinate /= 1e5
|
coordinate /= 1e5
|
||||||
print coordinate
|
|
||||||
if len(coordinates) > 1:
|
if len(coordinates) > 1:
|
||||||
# We have to sum the previous with the offset in this chunk
|
# We have to sum the previous with the offset in this chunk
|
||||||
coordinate += coordinates[-2]
|
coordinate += coordinates[-2]
|
||||||
coordinates.append(round(coordinate, 5))
|
coordinates.append(round(coordinate, 5))
|
||||||
|
|
||||||
print coordinates
|
|
||||||
|
|
||||||
return zip(coordinates, coordinates[1:])[::2]
|
return zip(coordinates, coordinates[1:])[::2]
|
||||||
|
|
||||||
def _extract_chunks(self, data):
|
def _extract_chunks(self, data):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from setuptools import setup, find_packages
|
|||||||
setup(
|
setup(
|
||||||
name='cartodb_services',
|
name='cartodb_services',
|
||||||
|
|
||||||
version='0.3.2',
|
version='0.3.3',
|
||||||
|
|
||||||
description='CartoDB Services API Python Library',
|
description='CartoDB Services API Python Library',
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,6 @@ class HereMapsRoutingIsolineTestCase(unittest.TestCase):
|
|||||||
HereMapsRoutingIsoline.ISOLINE_PATH)
|
HereMapsRoutingIsoline.ISOLINE_PATH)
|
||||||
|
|
||||||
def test_calculate_isodistance_with_valid_params(self, req_mock):
|
def test_calculate_isodistance_with_valid_params(self, req_mock):
|
||||||
print self.isoline_url
|
|
||||||
url = "{0}?start=geo%2133.0%2C1.0&mode=shortest%3Bcar".format(self.isoline_url)
|
url = "{0}?start=geo%2133.0%2C1.0&mode=shortest%3Bcar".format(self.isoline_url)
|
||||||
req_mock.register_uri('GET', url, text=self.GOOD_RESPONSE)
|
req_mock.register_uri('GET', url, text=self.GOOD_RESPONSE)
|
||||||
response = self.routing.calculate_isodistance('geo!33.0,1.0', 'car',
|
response = self.routing.calculate_isodistance('geo!33.0,1.0', 'car',
|
||||||
|
|||||||
Reference in New Issue
Block a user