Добавлены классы стандартных исключений

This commit is contained in:
2026-07-11 22:55:42 +03:00
parent 3fba091cbc
commit c90abe11f8
16 changed files with 550 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет классов исключений
"""
from .bad_request_exception import BadRequestException
from .critical_exception import CriticalException
from .file_not_found_exception import FileNotFoundException
from .forbidden_exception import ForbiddenException
from .not_found_exception import NotFoundException
from .unauthorized_exception import UnauthorizedException

View File

@@ -0,0 +1,45 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса BadRequestException
"""
from typing import Any
from django.utils.translation import gettext as _
from rest_framework import status
from net.xeaf.rack.core import CoreException
class BadRequestException(CoreException):
"""
Исключение, возникающее при ошибке в запросе
"""
def __init__(self, detail: list | dict | str | None = None, meta: dict | None = None, **kwargs: Any):
"""
Инициализация
:param detail: Информация об ошибке
:param meta: Информация для обработки ошибки
:param kwargs: Дополнительные параметры
"""
# Сообщение об ошибке по умолчанию
if detail is None:
detail = _(self.Msg.DEFAULT_MESSAGE)
super().__init__(status.HTTP_400_BAD_REQUEST, detail, meta, **kwargs)
class Msg:
"""
Константы сообщений
"""
DEFAULT_MESSAGE = _("rack.errors.http.bad_request")
""" Некорректный запрос """

View File

@@ -0,0 +1,54 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса CriticalException
"""
from typing import Any
from django.utils.translation import gettext as _
from rest_framework import status
from net.xeaf.rack.core import CoreException
class CriticalException(CoreException):
"""
Исключение, возникающее при внутренней ошибке сервера
"""
def __init__(self, detail: list | str | None = None, meta: dict | None = None, **kwargs: Any):
"""
Инициализация
:param detail: Информация об ошибке
:param meta: Информация для обработки ошибки
:param kwargs: Дополнительные параметры
"""
# Сообщение об ошибке по умолчанию
if detail is None:
detail = _(self.Msg.DEFAULT_MESSAGE)
super().__init__(status.HTTP_500_INTERNAL_SERVER_ERROR, detail, meta, **kwargs)
def is_pure_status(self) -> bool:
"""
Возвращает признак необходимости возвращать в ответе реальный статус HTTP
:return: Признак необходимости
"""
return True
class Msg:
"""
Константы сообщений
"""
DEFAULT_MESSAGE = _("rack.errors.http.internal_server_error")
""" Внутренняя ошибка сервера """

View File

@@ -0,0 +1,26 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса FileNotFoundException
"""
from .not_found_exception import NotFoundException
class FileNotFoundException(NotFoundException):
"""
Исключение, возникающее при невозможности найти запрашиваемый файл
"""
def is_pure_status(self) -> bool:
"""
Возвращает признак необходимости возвращать в ответе реальный статус HTTP
:return: Признак необходимости
"""
return True

View File

@@ -0,0 +1,45 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса ForbiddenException
"""
from typing import Any
from django.utils.translation import gettext as _
from rest_framework import status
from net.xeaf.rack.core import CoreException
class ForbiddenException(CoreException):
"""
Исключение, возникающее при нарушении прав доступа
"""
def __init__(self, detail: list | str | None = None, meta: dict | None = None, **kwargs: Any):
"""
Инициализация
:param detail: Информация об ошибке
:param meta: Информация для обработки ошибки
:param kwargs: Дополнительные параметры
"""
# Сообщение об ошибке по умолчанию
if detail is None:
detail = _(self.Msg.DEFAULT_MESSAGE)
super().__init__(status.HTTP_403_FORBIDDEN, detail, meta, **kwargs)
class Msg:
"""
Константы сообщений
"""
DEFAULT_MESSAGE = _("rack.errors.http.forbidden")
""" Доступ запрещен """

View File

@@ -0,0 +1,45 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса NotFoundException
"""
from typing import Any
from django.utils.translation import gettext as _
from rest_framework import status
from net.xeaf.rack.core import CoreException
class NotFoundException(CoreException):
"""
Исключение, возникающее при невозможности найти запрашиваемый объект
"""
def __init__(self, detail: list | str | None = None, meta: dict | None = None, **kwargs: Any):
"""
Инициализация
:param detail: Информация об ошибке
:param meta: Информация для обработки ошибки
:param kwargs: Дополнительные параметры
"""
# Сообщение об ошибке по умолчанию
if detail is None:
detail = _(self.Msg.DEFAULT_MESSAGE)
super().__init__(status.HTTP_404_NOT_FOUND, detail, meta, **kwargs)
class Msg:
"""
Константы сообщений
"""
DEFAULT_MESSAGE = _("rack.errors.http.not_found")
""" Объект не найден """

View File

@@ -0,0 +1,45 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса UnauthorizedException
"""
from typing import Any
from django.utils.translation import gettext as _
from rest_framework import status
from net.xeaf.rack.core import CoreException
class UnauthorizedException(CoreException):
"""
Исключение, возникающее при ошибке авторизации
"""
def __init__(self, detail: list | str | None = None, meta: dict | None = None, **kwargs: Any):
"""
Инициализация
:param detail: Информация об ошибке
:param meta: Информация для обработки ошибки
:param kwargs: Дополнительные параметры
"""
# Сообщение об ошибке по умолчанию
if detail is None:
detail = _(self.Msg.DEFAULT_MESSAGE)
super().__init__(status.HTTP_401_UNAUTHORIZED, detail, meta, **kwargs)
class Msg:
"""
Константы сообщений
"""
DEFAULT_MESSAGE = _("rack.errors.http.unauthorized")
""" Учетные данные не были предоставлены """