Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _raise_rate_limit_exception(self, timeout, limit_rate):
raise exc.RateLimitExceeded("Rate limit of {0} exceeded. "
"Try again in {1} seconds.".format(limit_rate, timeout),
limit=limit_rate, timeout=timeout)
def __call__(self, args):
"""
Register another request is being issued.
Depending on configuration of the rule will pause if rate limit has
been reached, or raise exception, etc.
"""
# First check if the deque is full; that indicates that we'd better check whether
# we need to pause.
if len(self.tab) == self.requests:
# Grab the oldest (leftmost) timestamp and check to see if it is greater than 1 second
delta = datetime.now() - self.tab[0]
if delta < self.timeframe: # Has it been less than configured timeframe since oldest request?
if self.raise_exc:
raise exc.RateLimitExceeded("Rate limit exceeded (can try again in {0})".format(self.timeframe - delta))
else:
# Wait the difference between timeframe and the oldest request.
td = self.timeframe - delta
sleeptime = hasattr(td, 'total_seconds') and td.total_seconds() or total_seconds(td)
self.log.debug("Rate limit triggered; sleeping for {0}".format(sleeptime))
time.sleep(sleeptime)
self.tab.append(datetime.now())
"""
class RateLimitExceeded(RuntimeError):
"""
Exception raised when the client rate limit has been exceeded.
http://strava.github.io/api/#access
"""
def __init__(self, msg, timeout=None, limit=None):
super(RateLimitExceeded, self).__init__()
self.limit = limit
self.timeout = timeout
class RateLimitTimeout(RateLimitExceeded):
"""
Exception raised when the client rate limit has been exceeded
and the time to clear the limit (timeout) has not yet been reached
http://strava.github.io/api/#access
"""
class ActivityUploadFailed(RuntimeError):
pass
class ErrorProcessingActivity(ActivityUploadFailed):
pass
def __init__(self, msg, timeout=None, limit=None):
super(RateLimitExceeded, self).__init__()
self.limit = limit
self.timeout = timeout