Skip to content

Commit 14a8d87

Browse files
Break out rate limiter protocol for testing
1 parent 99e161c commit 14a8d87

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/replit_river/rate_limiter.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import random
44
from contextvars import Context
5+
from typing import Protocol
56

67
from replit_river.error_schema import RiverException
78
from replit_river.transport_options import ConnectionRetryOptions
@@ -15,6 +16,13 @@ def __init__(self, code: str, message: str, client_id: str) -> None:
1516
self.client_id = client_id
1617

1718

19+
class RateLimiter(Protocol):
20+
def start_restoring_budget(self, user: str) -> None: ...
21+
def get_backoff_ms(self, user: str) -> float: ...
22+
def has_budget(self, user: str) -> bool: ...
23+
def consume_budget(self, user: str) -> None: ...
24+
25+
1826
class LeakyBucketRateLimit:
1927
"""Asynchronous leaky bucket rate limiter.
2028

src/replit_river/v2/session.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
parse_transport_msg,
5555
send_transport_message,
5656
)
57-
from replit_river.rate_limiter import LeakyBucketRateLimit
57+
from replit_river.rate_limiter import RateLimiter
5858
from replit_river.rpc import (
5959
ACK_BIT,
6060
STREAM_OPEN_BIT,
@@ -143,7 +143,7 @@ class Session[HandshakeMetadata]:
143143
_wait_for_connected: asyncio.Event
144144

145145
_client_id: str
146-
_rate_limiter: LeakyBucketRateLimit
146+
_rate_limiter: RateLimiter
147147
_uri_and_metadata_factory: Callable[
148148
[], Awaitable[UriAndMetadata[HandshakeMetadata]]
149149
]
@@ -176,7 +176,7 @@ def __init__(
176176
transport_options: TransportOptions,
177177
close_session_callback: CloseSessionCallback,
178178
client_id: str,
179-
rate_limiter: LeakyBucketRateLimit,
179+
rate_limiter: RateLimiter,
180180
uri_and_metadata_factory: Callable[
181181
[], Awaitable[UriAndMetadata[HandshakeMetadata]]
182182
],
@@ -1034,7 +1034,7 @@ async def _do_ensure_connected[HandshakeMetadata](
10341034
client_id: str,
10351035
session_id: str,
10361036
server_id: str,
1037-
rate_limiter: LeakyBucketRateLimit,
1037+
rate_limiter: RateLimiter,
10381038
uri_and_metadata_factory: Callable[
10391039
[], Awaitable[UriAndMetadata[HandshakeMetadata]]
10401040
],

0 commit comments

Comments
 (0)