1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/peeringdb_server/exceptions.py
Stefan Pratter 5eb925e319 Support 202301 (#1329)
* 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>
2023-02-15 07:55:01 +00:00

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