Django получение исключений ошибок должно происходить от BaseException

Info: Я хочу загрузить файлы, используя Uppy во фронтенде и django-tus в качестве бэкенда для обработки файлов. Я получаю ошибку TypeError: exceptions must derive from BaseException.

Traceback

Internal Server Error: /tus/upload/6393bfe5-277e-4c68-b9af-c0394be796b9
Traceback (most recent call last):
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/django_tus/views.py", line 37, in dispatch
    return super(TusUpload, self).dispatch(*args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/contrib/auth/mixins.py", line 71, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/env/lib/python3.10/site-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/c0d3/git/django-rus-multi-files/django_tus/views.py", line 82, in head
    tus_file = TusFile.get_tusfile_or_404(str(resource_id))
  File "/home/c0d3/git/django-rus-multi-files/django_tus/tusfile.py", line 75, in get_tusfile_or_404
    raise TusResponse(status=404)
TypeError: exceptions must derive from BaseException
[06/Aug/2022 14:36:42] "HEAD /tus/upload/6393bfe5-277e-4c68-b9af-c0394be796b9 HTTP/1.1" 500 103054
[06/Aug/2022 14:36:42,624] - Broken pipe from ('127.0.0.1', 35814)

[06/Aug/2022 14:36:42] "POST /tus/upload/ HTTP/1.1" 201 0
[06/Aug/2022 14:36:42] "PATCH /tus/upload/8295bef4-c94a-4ab7-9c75-2635c74428d8 HTTP/1.1" 204 0

https://github.com/alican/django-tus/blob/master/django_tus/tusfile.py

class TusUpload(View):

    def head(self, request, resource_id):
        tus_file = TusFile.get_tusfile_or_404(str(resource_id))

        return TusResponse(
            status=200,
            extra_headers={
                'Upload-Offset': tus_file.offset,
                'Upload-Length': tus_file.file_size,
            })
def create_initial_file(metadata, file_size: int):
        resource_id = str(uuid.uuid4())
        cache.add("tus-uploads/{}/filename".format(resource_id), "{}".format(metadata.get("filename")), settings.TUS_TIMEOUT)
        cache.add("tus-uploads/{}/file_size".format(resource_id), file_size, settings.TUS_TIMEOUT)
        cache.add("tus-uploads/{}/offset".format(resource_id), 0, settings.TUS_TIMEOUT)
        cache.add("tus-uploads/{}/metadata".format(resource_id), metadata, settings.TUS_TIMEOUT)

        tus_file = TusFile(resource_id)
        tus_file.write_init_file()
        return tus_file

EDIT: Наш запрос pull request теперь исправил эту ошибку.

Попытки django-tus в случае 404 ошибки поднимают в строке 60 TusResponse, которая, однако, не наследуется от exception.

Это ошибка библиотеки. Она не обновлялась 2 года и, согласно @torek BaseException, наследование ранее не применялось. Вы можете попробовать обернуть его в try-except с помощью TypeError, но в моей реализации это не работает.

Вы можете попытаться добавить BaseException к наследуемым классам TusResponse в вашей версии django-tus.

class TusResponse(HttpResponse, BaseException):

что должно устранить ошибку.

Вернуться на верх