The cinder.api.v1.limits Module

Module dedicated functions/classes dealing with rate limiting requests.

class Limit(verb, uri, regex, value, unit)

Bases: object

Stores information about a limit for HTTP requests.

UNITS = {3600: 'HOUR', 1: 'SECOND', 86400: 'DAY', 60: 'MINUTE'}
UNIT_MAP = {'SECOND': 1, 'MINUTE': 60, 'DAY': 86400, 'HOUR': 3600}
display()

Return a useful representation of this class.

display_unit()

Display the string name of the unit.

class Limiter(limits, **kwargs)

Bases: object

Rate-limit checking class which handles limits in memory.

check_for_delay(verb, url, username=None)

Check the given verb/user/user triplet for limit.

@return: Tuple of delay (in seconds) and error message (or None, None)

get_limits(username=None)

Return the limits for a given user.

static parse_limits(limits)

Convert a string into a list of Limit instances.

This implementation expects a semicolon-separated sequence of parenthesized groups, where each group contains a comma-separated sequence consisting of HTTP method, user-readable URI, a URI reg-exp, an integer number of requests which can be made, and a unit of measure. Valid values for the latter are “SECOND”, “MINUTE”, “HOUR”, and “DAY”.

@return: List of Limit instances.

class LimitsController(view_builder=None)

Bases: cinder.api.openstack.wsgi.Controller

Controller for accessing limits in the OpenStack API.

index(req)

Return all global and rate limit information.

wsgi_actions = {}
wsgi_extensions = []
class RateLimitingMiddleware(application, limits=None, limiter=None, **kwargs)

Bases: cinder.wsgi.common.Middleware

Rate-limits requests passing through this middleware.

All limit information is stored in memory for this implementation.

class WsgiLimiter(limits=None)

Bases: object

Rate-limit checking from a WSGI application.

Uses an in-memory Limiter.

To use, POST /<username> with JSON data such as:

{
    "verb" : GET,
    "path" : "/servers"
}

and receive a 204 No Content, or a 403 Forbidden with an X-Wait-Seconds header containing the number of seconds to wait before the action would succeed.

class WsgiLimiterProxy(limiter_address)

Bases: object

Rate-limit requests based on answers from a remote source.

check_for_delay(verb, path, username=None)
static parse_limits(limits)

Ignore a limits string–simply doesn’t apply for the limit proxy.

@return: Empty list.

create_resource()