# SPDX-License-Identifier: GPLv3
# Copyright © 2025 pygaindalf Rui Pinheiro
from ...config.models import BaseConfigModel
from pydantic import Field, PositiveInt
from requests_ratelimiter import RequestRate, Limiter
from functools import cached_property
# MARK: Default Request Rate Configuration
[docs]
class RequestRateConfig(BaseConfigModel):
limit : PositiveInt = Field(description='Rate limit in requests per interval.')
interval : PositiveInt = Field(default=1, description='Interval for the rate limit in seconds.')
[docs]
def to_rate(self) -> RequestRate:
return RequestRate(
limit=self.limit,
interval=self.interval
)
[docs]
def to_limiter(self) -> Limiter:
return Limiter(self.to_rate())
[docs]
@cached_property
def limiter(self) -> Limiter:
"""
Returns a Limiter instance based on the rate limit configuration.
"""
return self.to_limiter()
[docs]
class DefaultRequestRateConfig(RequestRateConfig):
hosts : dict[str, RequestRateConfig | None] = Field(default_factory=dict, description='Rate limits for specific hosts, where the key is the host name and the value is the rate limit configuration. If None, no rate limit is applied.')