def test_check(self): """Verify what we call for the check method.""" limiter = mock.Mock() quota = mock.Mock() t = throttle.Throttle(rate=quota, limiter=limiter) t.check("key", 10) limiter.rate_limit.assert_called_once_with("key", 10, quota)
def test_periodic_end_to_end(): """Verify our periodic limiter works behind our throttle.""" rate = quota.Quota.per_minute(5) store = dstore.DictionaryStore() limiter = periodic.PeriodicLimiter(store=store) periodic_throttle = throttle.Throttle(rate=rate, limiter=limiter) assert periodic_throttle.check("periodic-end-to-end", 5).limited is False assert (periodic_throttle.check("periodic-end-to-end-2", 5).limited is False) assert periodic_throttle.check("periodic-end-to-end", 5).limited is True assert periodic_throttle.check("periodic-end-to-end-2", 5).limited is True
__version__ = "2019.1.0.dev0" logger = structlog.get_logger() app = flask.Flask(__name__) logging.basicConfig(format="%(message)s", stream=sys.stdout, level=logging.INFO) structlog.configure( processors=[ structlog.processors.KeyValueRenderer( key_order=["event", "request_id"]) ], context_class=structlog.threadlocal.wrap_dict(dict), logger_factory=structlog.stdlib.LoggerFactory(), ) REDIS_URL = os.environ.get("REDIS_URL") if REDIS_URL: store = redis_store.RedisStore(url=REDIS_URL) else: store = dict_store.DictionaryStore() anonymous_quota = quota.Quota.per_hour(50) authenticated_quota = quota.Quota.per_hour(5000, maximum_burst=500) limiter = gcra.GenericCellRatelimiter(store=store) anonymous_throttle = throttle.Throttle(rate=anonymous_quota, limiter=limiter) authenticated_throttle = throttle.Throttle(rate=authenticated_quota, limiter=limiter)