Добавлены классы стандартных исключений
This commit is contained in:
@@ -40,6 +40,16 @@ class CoreException(Exception):
|
|||||||
self._process_meta(meta, **kwargs)
|
self._process_meta(meta, **kwargs)
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
# noinspection PyMethodMayBeStatic
|
||||||
|
def is_pure_status(self) -> bool:
|
||||||
|
"""
|
||||||
|
Возвращает признак необходимости возвращать в ответе реальный статус HTTP
|
||||||
|
|
||||||
|
:return: Признак необходимости
|
||||||
|
"""
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def _process_meta(self, meta: dict | None, **kwargs: Any) -> None:
|
def _process_meta(self, meta: dict | None, **kwargs: Any) -> None:
|
||||||
"""
|
"""
|
||||||
Разбирает переданные параметры
|
Разбирает переданные параметры
|
||||||
|
|||||||
@@ -131,3 +131,11 @@ class CoreExceptionTests(SimpleTestCase):
|
|||||||
self.assertIsNotNone(self.exc_instance.meta)
|
self.assertIsNotNone(self.exc_instance.meta)
|
||||||
self.assertIsInstance(self.exc_instance.meta, dict)
|
self.assertIsInstance(self.exc_instance.meta, dict)
|
||||||
self.assertEqual(self.exc_instance.meta["trace_id"], "xyz")
|
self.assertEqual(self.exc_instance.meta["trace_id"], "xyz")
|
||||||
|
|
||||||
|
def test_is_pure_status_defaults_to_false(self):
|
||||||
|
"""
|
||||||
|
Проверяет, что по умолчанию исключение возвращает False для чистого статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = CoreException(status_code=400)
|
||||||
|
self.assertFalse(exc.is_pure_status())
|
||||||
|
|||||||
16
net/xeaf/rack/tests/utils/exceptions/__init__.py
Normal file
16
net/xeaf/rack/tests/utils/exceptions/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Пакет описания тестов для классов исключений
|
||||||
|
"""
|
||||||
|
|
||||||
|
from .bad_request_exception_tests import BadRequestExceptionTests
|
||||||
|
from .critical_exception_tests import CriticalExceptionTests
|
||||||
|
from .file_not_found_exception_tests import FileNotFoundExceptionTests
|
||||||
|
from .forbidden_exception_tests import ForbiddenExceptionTests
|
||||||
|
from .not_found_exception_tests import NotFoundExceptionTests
|
||||||
|
from .unauthorized_exception_tests import UnauthorizedExceptionTests
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса BadRequestExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import BadRequestException
|
||||||
|
|
||||||
|
|
||||||
|
class BadRequestExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для BadRequestException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет инициализацию по умолчанию (без параметров)
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = BadRequestException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_400_BAD_REQUEST)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.bad_request")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_false(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает False для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = BadRequestException()
|
||||||
|
|
||||||
|
self.assertFalse(exc.is_pure_status())
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса CriticalExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import CriticalException
|
||||||
|
|
||||||
|
|
||||||
|
class CriticalExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для CriticalException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет дефолтные параметры: статус и сообщение об ошибке
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = CriticalException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.internal_server_error")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_true(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает True для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = CriticalException()
|
||||||
|
|
||||||
|
self.assertTrue(exc.is_pure_status())
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса FileNotFoundExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import FileNotFoundException
|
||||||
|
|
||||||
|
|
||||||
|
class FileNotFoundExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для FileNotFoundException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет дефолтные параметры: статус и сообщение об ошибке
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = FileNotFoundException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_404_NOT_FOUND)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.not_found")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_true(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает True для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = FileNotFoundException()
|
||||||
|
|
||||||
|
self.assertTrue(exc.is_pure_status())
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса ForbiddenExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import ForbiddenException
|
||||||
|
|
||||||
|
|
||||||
|
class ForbiddenExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для BadRequestException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет инициализацию по умолчанию (без параметров)
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = ForbiddenException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.forbidden")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_false(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает False для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = ForbiddenException()
|
||||||
|
|
||||||
|
self.assertFalse(exc.is_pure_status())
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса NotFoundExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import NotFoundException
|
||||||
|
|
||||||
|
|
||||||
|
class NotFoundExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для NotFoundException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет дефолтные параметры: статус и сообщение об ошибке
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = NotFoundException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_404_NOT_FOUND)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.not_found")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_false(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает False для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = NotFoundException()
|
||||||
|
|
||||||
|
self.assertFalse(exc.is_pure_status())
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Описание класса UnauthorizedExceptionTests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import SimpleTestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from net.xeaf.rack.utils.exceptions import UnauthorizedException
|
||||||
|
|
||||||
|
|
||||||
|
class UnauthorizedExceptionTests(SimpleTestCase):
|
||||||
|
"""
|
||||||
|
Тесты для UnauthorizedException
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_init_with_defaults(self):
|
||||||
|
"""
|
||||||
|
Проверяет дефолтные параметры: статус и сообщение об ошибке
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = UnauthorizedException()
|
||||||
|
|
||||||
|
self.assertEqual(exc.status_code, status.HTTP_401_UNAUTHORIZED)
|
||||||
|
self.assertEqual(exc.detail, "rack.errors.http.unauthorized")
|
||||||
|
self.assertIsNone(exc.meta)
|
||||||
|
|
||||||
|
def test_is_pure_status_returns_false(self):
|
||||||
|
"""
|
||||||
|
Гарантирует, что ошибка возвращает False для чистого HTTP статуса
|
||||||
|
"""
|
||||||
|
|
||||||
|
exc = UnauthorizedException()
|
||||||
|
|
||||||
|
self.assertFalse(exc.is_pure_status())
|
||||||
16
net/xeaf/rack/utils/exceptions/__init__.py
Normal file
16
net/xeaf/rack/utils/exceptions/__init__.py
Normal 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
|
||||||
45
net/xeaf/rack/utils/exceptions/bad_request_exception.py
Normal file
45
net/xeaf/rack/utils/exceptions/bad_request_exception.py
Normal 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")
|
||||||
|
""" Некорректный запрос """
|
||||||
54
net/xeaf/rack/utils/exceptions/critical_exception.py
Normal file
54
net/xeaf/rack/utils/exceptions/critical_exception.py
Normal 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")
|
||||||
|
""" Внутренняя ошибка сервера """
|
||||||
26
net/xeaf/rack/utils/exceptions/file_not_found_exception.py
Normal file
26
net/xeaf/rack/utils/exceptions/file_not_found_exception.py
Normal 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
|
||||||
45
net/xeaf/rack/utils/exceptions/forbidden_exception.py
Normal file
45
net/xeaf/rack/utils/exceptions/forbidden_exception.py
Normal 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")
|
||||||
|
""" Доступ запрещен """
|
||||||
45
net/xeaf/rack/utils/exceptions/not_found_exception.py
Normal file
45
net/xeaf/rack/utils/exceptions/not_found_exception.py
Normal 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")
|
||||||
|
""" Объект не найден """
|
||||||
45
net/xeaf/rack/utils/exceptions/unauthorized_exception.py
Normal file
45
net/xeaf/rack/utils/exceptions/unauthorized_exception.py
Normal 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")
|
||||||
|
""" Учетные данные не были предоставлены """
|
||||||
Reference in New Issue
Block a user