Quickstart¶
Note
In an async context, simply substitute the imports
from limits
to limits.aio
and use await
in
the storage and limiter methods.
Initialize the strategy & storage¶
Initialize the storage backend¶
Initialize a rate limiter¶
Describe the rate limit¶
Initialize a rate limit using the string notation¶
from limits import parse
one_per_minute = parse("1/minute")
Initialize a rate limit explicitly using a subclass of RateLimitItem
¶
from limits import RateLimitItemPerSecond
one_per_second = RateLimitItemPerSecond(1, 1)
Test the limits¶
Consume the limits¶
assert True == limiter.hit(one_per_minute, "test_namespace", "foo")
assert False == limiter.hit(one_per_minute, "test_namespace", "foo")
assert True == limiter.hit(one_per_minute, "test_namespace", "bar")
assert True == limiter.hit(one_per_second, "test_namespace", "foo")
assert False == limiter.hit(one_per_second, "test_namespace", "foo")
time.sleep(1)
assert True == limiter.hit(one_per_second, "test_namespace", "foo")
Check without consuming¶
assert True == limiter.hit(one_per_second, "test_namespace", "foo")
while not limiter.test(one_per_second, "test_namespace", "foo"):
time.sleep(0.01)
assert True == limiter.hit(one_per_second, "test_namespace", "foo")
Query available capacity and reset time¶
assert True == limiter.hit(one_per_minute, "test_namespace", "foo")
window = limiter.get_window_stats(one_per_minute, "test_namespace", "foo")
assert window.remaining == 0
assert False == limiter.hit(one_per_minute, "test_namespace", "foo")
time.sleep(window.reset_time - time.time())
assert True == limiter.hit(one_per_minute, "test_namespace", "foo")
Clear a limit¶
assert True == limiter.hit(one_per_minute, "test_namespace", "foo")
assert False == limiter.hit(one_per_minute, "test_namespace", "foo")
limiter.clear(one_per_minute, "test_namespace", "foo")
assert True == limiter.hit(one_per_minute, "test_namespace", "foo")
Rate limit string notation¶
Instead of manually constructing instances of RateLimitItem
you can instead use the following Parsing functions.
These functions accept rate limits specified as strings following the format:
[count] [per|/] [n (optional)] [second|minute|hour|day|month|year]
You can combine rate limits by separating them with a delimiter of your choice.
Examples¶
10 per hour
10/hour
10/hour;100/day;2000 per year
100/day, 500/7days