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
Matt Griswold 505760aa8d Support 202203 (#1144)
* Do not show objects in status "pending" on the UI #784

* Fix peeringdb.js bug introduced in #784

* 500 Error during login for 2FA enabled accounts with unverified email address #996

* Django-Admin: adding a network with existing asn fails with internal error #1035

* Some command-line-tool executions are not logged #1119

* Ops: API throttling of repeated requests #1126

* Ops: response header X-Auth-ID to augment logging #1120

* Allow rate-limiting of melissa enabled api functionality. #1124

* State / Province normalization #1079

* Log melissa requests #1122

* remove debug messages

* bump django-handleref to 1.0.2

* Need consolidated app logs #845

* pin django peeringdb to 2.13 and relock poetry

* pin django-restframework-apikey to 2.1.0

* linting

* migrations

* docs regenerate

* docs

* linting

Co-authored-by: David Poarch <dpoarch@20c.com>
Co-authored-by: Stefan Pratter <stefan@20c.com>
2022-04-12 15:39:19 -05: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