Initial commit
Dieser Commit ist enthalten in:
36
domain/entities/rate_limit_policy.py
Normale Datei
36
domain/entities/rate_limit_policy.py
Normale Datei
@ -0,0 +1,36 @@
|
||||
"""
|
||||
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)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren