Source code for scapi.http.ratelimit
from datetime import datetime, timezone
from typing import Optional
from pydantic import BaseModel, Field, field_validator
[docs]
class RateLimit(BaseModel):
limit: Optional[int] = Field(None, alias="x-ratelimit-limit")
remaining: Optional[int] = Field(None, alias="x-ratelimit-remaining")
used: Optional[int] = Field(None, alias="x-ratelimit-used")
reset: Optional[datetime] = Field(None, alias="x-ratelimit-reset")
@property
def estimated_used(self) -> Optional[int]:
"""Estimated requests used based on limit and remaining."""
if self.limit is not None and self.remaining is not None:
return max(0, self.limit - self.remaining)
return None
[docs]
@field_validator("reset", mode="before")
@classmethod
def parse_reset(cls, reset: str | None) -> Optional[datetime]:
if not reset:
return None
try:
timestamp = int(reset)
power = len(reset) - 10
divisor = 10 ** max(0, power)
return datetime.fromtimestamp(int(timestamp / divisor), tz=timezone.utc)
except Exception:
return None