From 25ba9866aea3cec96accd64c5594c9c73d90ed4e Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Tue, 7 Mar 2017 13:31:06 +0100 Subject: [PATCH] Small PoC with rratelimit #346 --- server/extension/sql/20_geocode_street.sql | 10 ++++++++++ server/lib/python/cartodb_services/requirements.txt | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/server/extension/sql/20_geocode_street.sql b/server/extension/sql/20_geocode_street.sql index b4fbcd1..91b87db 100644 --- a/server/extension/sql/20_geocode_street.sql +++ b/server/extension/sql/20_geocode_street.sql @@ -169,6 +169,16 @@ RETURNS Geometry AS $$ redis_metrics_connection = RedisMetricsConnectionFactory(environment, server_config_backend).get() + #-- e.g: RateLimit(service='geocoder', user=username, max_requests=2, period=60) + #-- rate_limiter = RateLimitBuilder(service='geocoder', user=username) + #-- How to pass the redis config along? + #-- rate_limiter_geocoder_config = RateLimiterUserConfigFactory(redis_metrics_connection, service='geocoder', user=username) + from rratelimit import Limiter + rate_limiter = Limiter(redis_metrics_connection, action='geocode', limit=2, period=60) + if not rate_limiter.checked_insert(username): + raise Exception('Rate limit exceeded') + + quota_service = QuotaService(mapzen_geocoder_config, redis_metrics_connection) if not quota_service.check_user_quota(): raise Exception('You have reached the limit of your quota') diff --git a/server/lib/python/cartodb_services/requirements.txt b/server/lib/python/cartodb_services/requirements.txt index 1b8b873..822d980 100644 --- a/server/lib/python/cartodb_services/requirements.txt +++ b/server/lib/python/cartodb_services/requirements.txt @@ -4,7 +4,8 @@ python-dateutil==2.2 googlemaps==2.4.2 rollbar==0.13.2 # Dependency for googlemaps package -requests<=2.9.1 +requests==2.9.1 +rratelimit==0.0.4 # Test mock==1.3.0