rate_limit#
- class litestar.middleware.rate_limit.CacheObject#
Bases:
object
Representation of a cached object’s metadata.
- class litestar.middleware.rate_limit.RateLimitConfig#
Bases:
object
Configuration for
RateLimitMiddleware
- rate_limit: tuple[DurationUnit, int]#
A tuple containing a time unit (second, minute, hour, day) and quantity, e.g. (“day”, 1) or (“minute”, 5).
- exclude: str | list[str] | None = None#
A pattern or list of patterns to skip in the rate limiting middleware.
- exclude_opt_key: str | None = None#
An identifier to use on routes to disable rate limiting for a particular route.
- check_throttle_handler: Callable[[Request[Any, Any, Any]], SyncOrAsyncUnion[bool]] | None = None#
Handler callable that receives the request instance, returning a boolean dictating whether or not the request should be checked for rate limiting.
- middleware_class#
The middleware class to use.
alias of
RateLimitMiddleware
- set_rate_limit_headers: bool = True#
Boolean dictating whether to set the rate limit headers on the response.
- rate_limit_policy_header_key: str = 'RateLimit-Policy'#
Key to use for the rate limit policy header.
- __init__(rate_limit: tuple[DurationUnit, int], exclude: str | list[str] | None = None, exclude_opt_key: str | None = None, check_throttle_handler: Callable[[Request[Any, Any, Any]], SyncOrAsyncUnion[bool]] | None = None, middleware_class: type[RateLimitMiddleware] = <class 'litestar.middleware.rate_limit.RateLimitMiddleware'>, set_rate_limit_headers: bool = True, rate_limit_policy_header_key: str = 'RateLimit-Policy', rate_limit_remaining_header_key: str = 'RateLimit-Remaining', rate_limit_reset_header_key: str = 'RateLimit-Reset', rate_limit_limit_header_key: str = 'RateLimit-Limit', store: str = 'rate_limit') None #
- rate_limit_remaining_header_key: str = 'RateLimit-Remaining'#
Key to use for the rate limit remaining header.
- property middleware: DefineMiddleware#
Use this property to insert the config into a middleware list on one of the application layers.
Examples
from litestar import Litestar, Request, get from litestar.middleware.rate_limit import RateLimitConfig # limit to 10 requests per minute, excluding the schema path throttle_config = RateLimitConfig(rate_limit=("minute", 10), exclude=["/schema"]) @get("/") def my_handler(request: Request) -> None: ... app = Litestar(route_handlers=[my_handler], middleware=[throttle_config.middleware])
- Returns:
An instance of
DefineMiddleware
includingself
as the config kwarg value.
- class litestar.middleware.rate_limit.RateLimitMiddleware#
Bases:
AbstractMiddleware
Rate-limiting middleware.
- __init__(app: ASGIApp, config: RateLimitConfig) None #
Initialize
RateLimitMiddleware
.
- create_send_wrapper(send: Send, cache_object: CacheObject) Send #
Create a
send
function that wraps the original send to inject response headers.
- async retrieve_cached_history(key: str, store: Store) CacheObject #
Retrieve a list of time stamps for the given duration unit.
- Parameters:
- Returns:
An
CacheObject
.
- async set_cached_history(key: str, cache_object: CacheObject, store: Store) None #
Store history extended with the current timestamp in cache.
- Parameters:
key¶ – Cache key.
cache_object¶ – A
CacheObject
.
- Returns:
None
- async should_check_request(request: Request[Any, Any, Any]) bool #
Return a boolean indicating if a request should be checked for rate limiting.
- create_response_headers(cache_object: CacheObject) dict[str, str] #
Create ratelimit response headers.
Notes
see the IETF RateLimit draft <https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/>_
- Parameters:
cache_object¶ – A
CacheObject
.- Returns:
A dict of http headers.