1"""Initialize this class to define request-rates for limiter
2"""
3from enum import Enum
4from typing import Any
5from typing import Dict
6
7from .exceptions import ImmutableClassProperty
8
9
10class ResetTypes(Enum):
11 SCHEDULED = 1
12 INTERVAL = 2
13
14
15class RequestRate:
16 """Request rate definition.
17
18 Args:
19 limit: Number of requests allowed within ``interval``
20 interval: Time interval, in seconds
21 """
22
23 def __init__(
24 self,
25 limit: int,
26 interval: int,
27 reset: ResetTypes = ResetTypes.INTERVAL,
28 ):
29 self._limit = limit
30 self._interval = interval
31 self._reset = reset
32 self._log: Dict[Any, Any] = {}
33
34 @property
35 def limit(self) -> int:
36 return self._limit
37
38 @limit.setter
39 def limit(self, _):
40 raise ImmutableClassProperty(self, "limit")
41
42 @property
43 def interval(self) -> int:
44 return self._interval
45
46 @interval.setter
47 def interval(self, _):
48 raise ImmutableClassProperty(self, "interval")
49
50 def __str__(self):
51 return f"{self.limit}/{self.interval}"