From 064af30d0f263d73e814e4c3ec790350558d1619 Mon Sep 17 00:00:00 2001 From: zanewalker Date: Wed, 4 Feb 2026 01:07:43 +0000 Subject: [PATCH] refactor: replace algorithm dict lookup with match/case pattern --- fastapi_traffic/core/algorithms.py | 37 ++++++++++++++++++------------ 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/fastapi_traffic/core/algorithms.py b/fastapi_traffic/core/algorithms.py index 4a3e1de..8384eb2 100644 --- a/fastapi_traffic/core/algorithms.py +++ b/fastapi_traffic/core/algorithms.py @@ -26,7 +26,7 @@ class Algorithm(str, Enum): class BaseAlgorithm(ABC): """Base class for rate limiting algorithms.""" - __slots__ = ("limit", "window_size", "backend", "burst_size") + __slots__ = ("backend", "burst_size", "limit", "window_size") def __init__( self, @@ -450,17 +450,24 @@ def get_algorithm( burst_size: int | None = None, ) -> BaseAlgorithm: """Factory function to create algorithm instances.""" - algorithm_map: dict[Algorithm, type[BaseAlgorithm]] = { - Algorithm.TOKEN_BUCKET: TokenBucketAlgorithm, - Algorithm.SLIDING_WINDOW: SlidingWindowAlgorithm, - Algorithm.FIXED_WINDOW: FixedWindowAlgorithm, - Algorithm.LEAKY_BUCKET: LeakyBucketAlgorithm, - Algorithm.SLIDING_WINDOW_COUNTER: SlidingWindowCounterAlgorithm, - } - - algorithm_class = algorithm_map.get(algorithm) - if algorithm_class is None: - msg = f"Unknown algorithm: {algorithm}" - raise ValueError(msg) - - return algorithm_class(limit, window_size, backend, burst_size=burst_size) + match algorithm: + case Algorithm.TOKEN_BUCKET: + return TokenBucketAlgorithm( + limit, window_size, backend, burst_size=burst_size + ) + case Algorithm.SLIDING_WINDOW: + return SlidingWindowAlgorithm( + limit, window_size, backend, burst_size=burst_size + ) + case Algorithm.FIXED_WINDOW: + return FixedWindowAlgorithm( + limit, window_size, backend, burst_size=burst_size + ) + case Algorithm.LEAKY_BUCKET: + return LeakyBucketAlgorithm( + limit, window_size, backend, burst_size=burst_size + ) + case Algorithm.SLIDING_WINDOW_COUNTER: + return SlidingWindowCounterAlgorithm( + limit, window_size, backend, burst_size=burst_size + )