2022-04-12 16:39:19 -04:00
|
|
|
from rest_framework.exceptions import Throttled
|
|
|
|
from rest_framework.views import exception_handler
|
|
|
|
|
|
|
|
|
|
|
|
def format_wait_time(wait_time):
|
|
|
|
"""
|
|
|
|
Format wait time in seconds to human readable format
|
|
|
|
"""
|
2022-04-28 07:01:07 -05:00
|
|
|
|
2022-04-12 16:39:19 -04:00
|
|
|
if wait_time < 60:
|
|
|
|
return f"{wait_time} seconds"
|
|
|
|
elif wait_time < 3600 and wait_time > 60:
|
|
|
|
return f"{wait_time // 60} minutes"
|
|
|
|
else:
|
|
|
|
return f"{wait_time // 3600} hours"
|
|
|
|
|
|
|
|
|
|
|
|
def rest_exception_handler(exc, context):
|
|
|
|
response = exception_handler(exc, context)
|
|
|
|
request = context.get("request")
|
|
|
|
|
|
|
|
if isinstance(exc, Throttled):
|
|
|
|
message = getattr(
|
|
|
|
request,
|
|
|
|
"throttle_response_message",
|
|
|
|
"Request was throttled. Expected available in {time}.",
|
|
|
|
)
|
|
|
|
custom_response_data = {
|
|
|
|
"message": f"{message}".replace("{time}", format_wait_time(exc.wait)),
|
|
|
|
}
|
|
|
|
|
|
|
|
response.data = custom_response_data
|
|
|
|
|
|
|
|
return response
|