mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-18 04:02:35 +03:00
Add support for denominators to throttle strings
Improved denominator string parser so you can for example write `1/30s` for 1 request every 30 seconds instead of being limited to throttling by to the closest time unit.
This commit is contained in:
parent
40eccb0d6c
commit
a84846c4ef
|
@ -56,6 +56,8 @@ class SimpleRateThrottle(BaseThrottle):
|
||||||
class. The attribute is a string of the form 'number_of_requests/period'.
|
class. The attribute is a string of the form 'number_of_requests/period'.
|
||||||
|
|
||||||
Period should be one of: ('s', 'sec', 'm', 'min', 'h', 'hour', 'd', 'day')
|
Period should be one of: ('s', 'sec', 'm', 'min', 'h', 'hour', 'd', 'day')
|
||||||
|
You may prefix period with a number. For example '1/30s' would be one
|
||||||
|
request every 30 seconds.
|
||||||
|
|
||||||
Previous request information used for throttling is stored in the cache.
|
Previous request information used for throttling is stored in the cache.
|
||||||
"""
|
"""
|
||||||
|
@ -103,7 +105,10 @@ class SimpleRateThrottle(BaseThrottle):
|
||||||
return (None, None)
|
return (None, None)
|
||||||
num, period = rate.split('/')
|
num, period = rate.split('/')
|
||||||
num_requests = int(num)
|
num_requests = int(num)
|
||||||
duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
|
denominator_num = period[:-1]
|
||||||
|
denominator_num = int(denominator) if len(denominator_num)>0 else 1
|
||||||
|
duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[-1]]
|
||||||
|
duration *= denominator_num
|
||||||
return (num_requests, duration)
|
return (num_requests, duration)
|
||||||
|
|
||||||
def allow_request(self, request, view):
|
def allow_request(self, request, view):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user