Skip to content

Rate Limit Strings

Format

Rate limit strings follow the format: {limit}/{unit}

@limiter.limit("100/minute")
@limiter.limit("10/second")
@limiter.limit("1000/hour")
@limiter.limit("10000/day")

Units

Unit Abbreviation Duration
second s 1 second
minute m 60 seconds
hour h 3600 seconds
day d 86400 seconds

Examples

# Requests per second
@limiter.limit("10/second")
@limiter.limit("10/s")

# Requests per minute
@limiter.limit("100/minute")
@limiter.limit("100/m")

# Requests per hour
@limiter.limit("1000/hour")
@limiter.limit("1000/h")

# Requests per day
@limiter.limit("10000/day")
@limiter.limit("10000/d")

Parsing

Rate limit strings are parsed by parse_rule_string():

from drogue.core.rules.rule import parse_rule_string

rule = parse_rule_string("100/minute")
# rule.limit = 100
# rule.window = 60.0

Default Limits

Default limits apply to all routes:

limiter = DrogueLimiter(
    app,
    default_limits=["100/minute"],
)

Multiple Limits

You can apply multiple limits to a single route:

@app.get("/api/data")
@limiter.limit("100/minute")
@limiter.limit("1000/hour")
async def get_data():
    return {"data": "value"}