| 230 | return max(0.0, limit - self.get_spending(window)) |
| 231 | |
| 232 | def status(self) -> SpendingStatus: |
| 233 | now = self._now() |
| 234 | hourly = self._window_total(now - HOUR_S, now) |
| 235 | daily = self._window_total(now - DAY_S, now) |
| 236 | return SpendingStatus( |
| 237 | limits=SpendLimits( |
| 238 | per_request=self._limits.per_request, |
| 239 | hourly=self._limits.hourly, |
| 240 | daily=self._limits.daily, |
| 241 | session=self._limits.session, |
| 242 | ), |
| 243 | spent={"hourly": hourly, "daily": daily, "session": self._session_spent}, |
| 244 | remaining={ |
| 245 | "hourly": (self._limits.hourly - hourly) if self._limits.hourly else None, |
| 246 | "daily": (self._limits.daily - daily) if self._limits.daily else None, |
| 247 | "session": (self._limits.session - self._session_spent) if self._limits.session else None, |
| 248 | }, |
| 249 | calls=self._session_calls, |
| 250 | ) |
| 251 | |
| 252 | def history(self, limit: int | None = None) -> list[SpendRecord]: |
| 253 | records = list(reversed(self._history)) |