From 0df0b0d49c53aad90a170006475e33f786a8f7de Mon Sep 17 00:00:00 2001 From: Mario de Frutos Date: Thu, 1 Feb 2018 18:21:15 +0100 Subject: [PATCH] Avoid treating quota exception as bug exception --- server/extension/sql/20_geocode_street.sql | 11 +++++++++-- .../cartodb_services/tools/__init__.py | 2 +- .../cartodb_services/tools/service_manager.py | 6 +++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/server/extension/sql/20_geocode_street.sql b/server/extension/sql/20_geocode_street.sql index 5a6b9fe..12d34e5 100644 --- a/server/extension/sql/20_geocode_street.sql +++ b/server/extension/sql/20_geocode_street.sql @@ -90,6 +90,7 @@ $$ LANGUAGE plpythonu STABLE PARALLEL RESTRICTED; CREATE OR REPLACE FUNCTION cdb_dataservices_server._cdb_here_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) RETURNS Geometry AS $$ from cartodb_services.tools import LegacyServiceManager + from cartodb_services.tools import QuotaExceededException from cartodb_services.here import HereMapsGeocoder plpy.execute("SELECT cdb_dataservices_server._get_logger_config()") @@ -107,6 +108,8 @@ RETURNS Geometry AS $$ else: service_manager.quota_service.increment_empty_service_use() return None + except QuotaExceededException as qe: + return None except BaseException as e: import sys service_manager.quota_service.increment_failed_service_use() @@ -147,7 +150,7 @@ $$ LANGUAGE plpythonu STABLE PARALLEL RESTRICTED; CREATE OR REPLACE FUNCTION cdb_dataservices_server._cdb_mapzen_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) RETURNS Geometry AS $$ - from cartodb_services.tools import ServiceManager + from cartodb_services.tools import ServiceManager, QuotaExceededException from cartodb_services.mapzen import MapzenGeocoder from cartodb_services.tools.country import country_to_iso3 from cartodb_services.refactor.service.mapzen_geocoder_config import MapzenGeocoderConfigBuilder @@ -174,6 +177,8 @@ RETURNS Geometry AS $$ else: service_manager.quota_service.increment_empty_service_use() return None + except QuotaExceededException as qe: + return None except BaseException as e: import sys service_manager.quota_service.increment_failed_service_use() @@ -186,7 +191,7 @@ $$ LANGUAGE plpythonu STABLE PARALLEL RESTRICTED; CREATE OR REPLACE FUNCTION cdb_dataservices_server._cdb_mapbox_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) RETURNS Geometry AS $$ from iso3166 import countries - from cartodb_services.tools import ServiceManager + from cartodb_services.tools import ServiceManager, QuotaExceededException from cartodb_services.mapbox import MapboxGeocoder from cartodb_services.tools.country import country_to_iso3 from cartodb_services.refactor.service.mapbox_geocoder_config import MapboxGeocoderConfigBuilder @@ -217,6 +222,8 @@ RETURNS Geometry AS $$ else: service_manager.quota_service.increment_empty_service_use() return None + except QuotaExceededException as qe: + return None except BaseException as e: import sys service_manager.quota_service.increment_failed_service_use() diff --git a/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py b/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py index 485a5f9..d8ca7f1 100644 --- a/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py +++ b/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py @@ -3,5 +3,5 @@ from coordinates import Coordinate from polyline import PolyLine from log import Logger, LoggerConfig from rate_limiter import RateLimiter -from service_manager import ServiceManager, RateLimitExceeded +from service_manager import ServiceManager, RateLimitExceeded, QuotaExceededException from legacy_service_manager import LegacyServiceManager diff --git a/server/lib/python/cartodb_services/cartodb_services/tools/service_manager.py b/server/lib/python/cartodb_services/cartodb_services/tools/service_manager.py index 51b8f5f..fd0d926 100644 --- a/server/lib/python/cartodb_services/cartodb_services/tools/service_manager.py +++ b/server/lib/python/cartodb_services/cartodb_services/tools/service_manager.py @@ -10,6 +10,10 @@ class RateLimitExceeded(Exception): def __str__(self): return repr('Rate limit exceeded') +class QuotaExceededException(Exception): + def __str__(self): + return repr('You have reached the limit of your quota') + class ServiceManagerBase: """ @@ -37,7 +41,7 @@ class ServiceManagerBase: if rate and not self.rate_limiter.check(): raise RateLimitExceeded() if quota and not self.quota_service.check_user_quota(): - raise Exception('You have reached the limit of your quota') + raise QuotaExceededException() @property def config(self):