mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
* fix next redirect when using U2F 2FA auth (#1191) * Added self identifier to API * fix migrations hierarchy after merging in previous support branch * campus object Co-authored-by: Stefan Pratter <stefan@20c.com> * fix out of bound error message add city / country to campus view * fix tests * relock poetry * linting * linting * fix docs regen * regen docs * linting * refactor self entity view to support carrier and campus object types and also make it easier to support additional object types in the future * remove debug message --------- Co-authored-by: Gajanan Patil <dipaksavaliya.python@gmail.com>
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
|