This hook wraps the standard function that Misago uses to delete attachments associated with specified users.
This hook can be imported from misago.attachments.hooks:
from misago.attachments.hooks import delete_users_attachments_hookdef custom_delete_users_attachments_filter(
action: DeleteUsersAttachmentsHookAction,
users: Iterable[Union['User', int]],
*,
request: HttpRequest | None=None,
) -> int:
...A function implemented by a plugin that can be registered in this hook.
A standard function used by Misago to delete attachments associated with specified users.
See the action section for details.
An iterable of users or their IDs.
The request object or None.
An int with the number of attachments marked for deletion.
def delete_users_attachments_action(
users: Iterable[Union['User', int]],
*,
request: HttpRequest | None=None,
) -> int:
...A standard function used by Misago to delete attachments associated with specified users.
An iterable of users or their IDs.
The request object or None.
An int with the number of attachments marked for deletion.
The code below implements a custom filter function that logs delete.
import logging
from typing import Iterable, Protocol, Union
from django.http import HttpRequest
from misago.attachments.hooks import delete_users_attachments_hook
from misago.users.models import User
logger = logging.getLogger("attachments.delete")
@delete_users_attachments_hook.append_filter
def log_delete_users_attachments(
action,
users: Iterable[Union[User, int]],
*,
request: HttpRequest | None = None,
) -> int:
deleted = action(users, request=request)
if request and request.user.is_authenticated:
user = f"#{request.user.id}: {request.user.username}"
else:
user = None
logger.info(
"Deleted users attachments: %s",
str(deleted),
extra={"user": user},
)
return deleted