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:
|
||||
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_lon = plpy.execute("SELECT ST_X('%s') AS lon" % origin)[0]['lon']
|
||||
origin_coordinates = Coordinate(orig_lon, orig_lat)
|
||||
@@ -39,10 +44,15 @@ RETURNS cdb_dataservices_server.simple_route AS $$
|
||||
|
||||
if resp and resp.shape:
|
||||
shape_linestring = polyline_to_linestring(resp.shape)
|
||||
quota_service.increment_success_service_use()
|
||||
return [shape_linestring, resp.length, resp.duration]
|
||||
if shape_linestring:
|
||||
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:
|
||||
quota_service.increment_empty_service_use()
|
||||
return [None, None, None]
|
||||
except BaseException as e:
|
||||
import sys, traceback
|
||||
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))
|
||||
wkt_coordinates = ','.join(coordinates)
|
||||
|
||||
sql = "SELECT ST_GeomFromText('LINESTRING({0})', 4326) as geom".format(wkt_coordinates)
|
||||
geometry = plpy.execute(sql, 1)[0]['geom']
|
||||
try:
|
||||
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
|
||||
|
||||
@@ -17,3 +17,5 @@ class Coordinate:
|
||||
def to_json(self):
|
||||
return "{{\"lon\": {0},\"lat\": {1}}}".format(self._longitude,
|
||||
self._latitude)
|
||||
def __str__(self):
|
||||
return "{0}, {1}".format(self._longitude, self._latitude)
|
||||
@@ -11,14 +11,11 @@ class PolyLine:
|
||||
for chunk in chunks:
|
||||
coordinate = self._process_chunk(chunk)
|
||||
coordinate /= 1e5
|
||||
print coordinate
|
||||
if len(coordinates) > 1:
|
||||
# We have to sum the previous with the offset in this chunk
|
||||
coordinate += coordinates[-2]
|
||||
coordinates.append(round(coordinate, 5))
|
||||
|
||||
print coordinates
|
||||
|
||||
return zip(coordinates, coordinates[1:])[::2]
|
||||
|
||||
def _extract_chunks(self, data):
|
||||
|
||||
@@ -10,7 +10,7 @@ from setuptools import setup, find_packages
|
||||
setup(
|
||||
name='cartodb_services',
|
||||
|
||||
version='0.3.2',
|
||||
version='0.3.3',
|
||||
|
||||
description='CartoDB Services API Python Library',
|
||||
|
||||
|
||||
@@ -132,7 +132,6 @@ class HereMapsRoutingIsolineTestCase(unittest.TestCase):
|
||||
HereMapsRoutingIsoline.ISOLINE_PATH)
|
||||
|
||||
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)
|
||||
req_mock.register_uri('GET', url, text=self.GOOD_RESPONSE)
|
||||
response = self.routing.calculate_isodistance('geo!33.0,1.0', 'car',
|
||||
|
||||
Reference in New Issue
Block a user