in modular_api/index.py [0:0]
def _rate_limited(self, app: Callable) -> Callable:
match self._env.mode():
case ServiceMode.SAAS:
storage = MemoryStorage()
# todo fix for saas, either implement storage for dynamodb
# or move completely to mongo, or use redis just for broker
# or use nginx and set rate limiting there.
# This MemoryStorage performs far from perfect when multiple
# processes and should not be used
case _:
storage = MongoDBStorage(
uri=self._env.mongo_uri(),
database_name=self._env.mongo_rate_limits_database()
)
return RateLimitMiddleware(
app=app,
limiter=MovingWindowRateLimiter(storage),
limit=RateLimitItemPerSecond(self._env.api_calls_per_second_limit())
)