Skip to content

Commit e10dbf6

Browse files
asottile-sentryChristinarlong
authored andcommitted
ref: adjust typing so rate_limits can be a callable (#74807)
this fixes an error in mypy 1.11 -- it also fixes an error in a currently-ignored file which has a callable `rate_limits` <!-- Describe your PR here. -->
1 parent 8ced13d commit e10dbf6

File tree

3 files changed

+4
-31
lines changed

3 files changed

+4
-31
lines changed

src/sentry/api/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ class Endpoint(APIView):
221221

222222
owner: ApiOwner = ApiOwner.UNOWNED
223223
publish_status: dict[HTTP_METHOD_NAME, ApiPublishStatus] = {}
224-
rate_limits: RateLimitConfig | dict[
225-
str, dict[RateLimitCategory, RateLimit]
224+
rate_limits: RateLimitConfig | dict[str, dict[RateLimitCategory, RateLimit]] | Callable[
225+
..., RateLimitConfig | dict[str, dict[RateLimitCategory, RateLimit]]
226226
] = DEFAULT_RATE_LIMIT_CONFIG
227227
enforce_rate_limit: bool = settings.SENTRY_RATELIMITER_ENABLED
228228
snuba_methods: list[HTTP_METHOD_NAME] = []

tests/sentry/middleware/test_ratelimit_middleware.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ class CallableRateLimitConfigEndpoint(Endpoint):
288288
permission_classes = (AllowAny,)
289289
enforce_rate_limit = True
290290

291-
def rate_limits(request):
291+
@staticmethod
292+
def rate_limits(*a, **k):
292293
return {
293294
"GET": {
294295
RateLimitCategory.IP: RateLimit(limit=20, window=1),

tests/sentry/ratelimits/utils/test_get_rate_limit_value.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -88,31 +88,3 @@ class ChildEndpoint(ParentEndpoint):
8888
assert get_rate_limit_value(
8989
"GET", RateLimitCategory.IP, rate_limit_config
9090
) == get_default_rate_limits_for_group("foo", RateLimitCategory.IP)
91-
92-
def test_multiple_inheritance(self):
93-
class ParentEndpoint(Endpoint):
94-
rate_limits: RateLimitConfig | dict[str, dict[RateLimitCategory, RateLimit]]
95-
rate_limits = {"GET": {RateLimitCategory.IP: RateLimit(limit=100, window=5)}}
96-
97-
class Mixin:
98-
rate_limits: RateLimitConfig | dict[str, dict[RateLimitCategory, RateLimit]]
99-
rate_limits = {"GET": {RateLimitCategory.IP: RateLimit(limit=2, window=4)}}
100-
101-
class ChildEndpoint(ParentEndpoint, Mixin):
102-
pass
103-
104-
_child_endpoint = ChildEndpoint.as_view()
105-
rate_limit_config = get_rate_limit_config(_child_endpoint.view_class)
106-
107-
class ChildEndpointReverse(Mixin, ParentEndpoint):
108-
pass
109-
110-
_child_endpoint_reverse = ChildEndpointReverse.as_view()
111-
rate_limit_config_reverse = get_rate_limit_config(_child_endpoint_reverse.view_class)
112-
113-
assert get_rate_limit_value("GET", RateLimitCategory.IP, rate_limit_config) == RateLimit(
114-
100, 5
115-
)
116-
assert get_rate_limit_value(
117-
"GET", RateLimitCategory.IP, rate_limit_config_reverse
118-
) == RateLimit(limit=2, window=4)

0 commit comments

Comments
 (0)