Source code for rate_control._buckets._base._token_based
__all__ = [
'TokenBasedBucket',
]
import sys
from abc import ABC
from typing import Any
from rate_control._buckets._base._abc import Bucket
from rate_control._helpers._validation import validate_capacity, validate_tokens
if sys.version_info >= (3, 12):
from typing import override
else:
from typing_extensions import override
[docs]class TokenBasedBucket(Bucket, ABC):
"""Base class for buckets that monitor the requests using tokens."""
[docs] def __init__(self, capacity: float, **kwargs: Any) -> None:
super().__init__(**kwargs)
validate_capacity(capacity)
self._tokens = self._capacity = capacity
[docs] @override
def can_acquire(self, tokens: float) -> bool:
validate_tokens(tokens)
return tokens <= self._tokens
[docs] @override
def acquire(self, tokens: float) -> None:
self._assert_can_acquire(tokens)
self._tokens -= tokens