mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
35 lines
937 B
Python
35 lines
937 B
Python
![]() |
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
|
||
|
"""
|
||
|
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
|