def upload_handlers_insert(position, handler):
    """
    Decorator that allows you to insert an upload_handler
    Used in when other deocrators lock the handlers ie. @staff_member_required decorator
    """
    def _decorator(view_func):
        def _upload_handlers_insert_func(request, *args, **kwargs):
            request.upload_handlers.insert(position, handler())
            return view_func(request, *args, **kwargs)

        _upload_handlers_insert_func.__doc__ = view_func.__doc__
        _upload_handlers_insert_func.__dict__ = view_func.__dict__
        return _upload_handlers_insert_func

    return _decorator

def upload_handlers_append(handler):
    """
    Decorator that allows you to append an upload_handler
    Used in when other deocrators lock the handlers ie. @staff_member_required decorator
    """
    def _decorator(view_func):
        def _upload_handlers_append_func(request, *args, **kwargs):
            request.upload_handlers.append(handler())

            return view_func(request, *args, **kwargs)

        _upload_handlers_append_func.__doc__ = view_func.__doc__
        _upload_handlers_append_func.__dict__ = view_func.__dict__
        return _upload_handlers_insert_func

    return _decorator

def upload_handlers(handlers):
    """
    Decorator that allows you to set the upload_handlers
    Used in when other deocrators lock the handlers ie. @staff_member_required decorator
    """
    def _decorator(view_func):
        def _upload_handlers_func(request, *args, **kwargs):
            upload_handlers = []
            for handler in handlers:
                upload_handlers.append(handler())
            request.upload_handlers = handlers

            return view_func(request, *args, **kwargs)

        _upload_handlers_func.__doc__ = view_func.__doc__
        _upload_handlers_func.__dict__ = view_func.__dict__
        return _upload_handlers_insert_func

    return _decorator