Source code for app.util.requests.config.rate

# 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.')