Source code for mxcubeweb.core.server.limiter
import logging
from flask import jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
[docs]def rate_limit_error_handler(_):
"""Handler for rate limit errors"""
logging.warning("Rate limit exceeded")
return jsonify(
{
"error": "Too many requests",
"message": "Allowed number or requests reached. Try again later.",
}
), 429
[docs]def init_limiter(app):
"""Initialize the rate limiter"""
limiter = Limiter(
app=app,
key_func=get_remote_address,
default_limits=app.config.get(
"RATELIMIT_DEFAULT", "150000 per day;6000 per hour"
).split(";"),
storage_uri=app.config.get("RATELIMIT_STORAGE_URI", "memory://"),
)
app.register_error_handler(429, rate_limit_error_handler)
return limiter