36 Zeilen
1.2 KiB
Python
36 Zeilen
1.2 KiB
Python
"""
|
|
Rate Limit Policy Entity - Definiert Geschwindigkeitsregeln für verschiedene Aktionen
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
|
|
@dataclass
|
|
class RateLimitPolicy:
|
|
"""Definiert Geschwindigkeitsregeln für verschiedene Aktionen"""
|
|
|
|
min_delay: float
|
|
max_delay: float
|
|
adaptive: bool = True
|
|
backoff_multiplier: float = 1.5
|
|
max_retries: int = 3
|
|
|
|
def __post_init__(self):
|
|
"""Validierung der Policy-Parameter"""
|
|
if self.min_delay < 0:
|
|
raise ValueError("min_delay muss >= 0 sein")
|
|
if self.max_delay < self.min_delay:
|
|
raise ValueError("max_delay muss >= min_delay sein")
|
|
if self.backoff_multiplier < 1.0:
|
|
raise ValueError("backoff_multiplier muss >= 1.0 sein")
|
|
if self.max_retries < 0:
|
|
raise ValueError("max_retries muss >= 0 sein")
|
|
|
|
def calculate_backoff_delay(self, attempt: int) -> float:
|
|
"""Berechnet Verzögerung basierend auf Versuchsnummer"""
|
|
if not self.adaptive:
|
|
return self.min_delay
|
|
|
|
delay = self.min_delay * (self.backoff_multiplier ** attempt)
|
|
return min(delay, self.max_delay) |