50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
# DRF Rack
|
|
# Библиотека классов расширений для Django REST Framework
|
|
#
|
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
|
# Все права защищены. Лицензия: MIT
|
|
|
|
"""
|
|
Описание класса ErrorResponse
|
|
"""
|
|
|
|
from rest_framework import status
|
|
|
|
from net.xeaf.rack.core import CoreResponse
|
|
|
|
|
|
class ErrorResponse(CoreResponse):
|
|
"""
|
|
Ответ с информацией об ошибке
|
|
"""
|
|
|
|
def __init__(self, status_code: int, detail: list | dict | str | bool | None, meta: dict | None = None):
|
|
"""
|
|
Инициализация
|
|
|
|
:param status_code: Код состояния
|
|
:param detail: Информация об ошибке
|
|
:param meta: Дополнительные данные
|
|
"""
|
|
|
|
super(ErrorResponse, self).__init__(
|
|
internal_status=status_code,
|
|
external_status=self._calc_external_status(status_code),
|
|
data=detail,
|
|
meta=meta)
|
|
|
|
@classmethod
|
|
def _calc_external_status(cls, status_code: int) -> int:
|
|
"""
|
|
Вычисляет значение внешнего возвращаемого статуса
|
|
|
|
:param status_code: Код состояния
|
|
|
|
:return: Внешний код состояния
|
|
"""
|
|
|
|
if status_code < status.HTTP_500_INTERNAL_SERVER_ERROR:
|
|
return status.HTTP_200_OK
|
|
|
|
return status_code
|