This hook wraps the standard function that Misago uses to delete attachments associated with specified posts.
This hook can be imported from misago.attachments.hooks:
from misago.attachments.hooks import delete_posts_attachments_hookdef custom_delete_posts_attachments_filter(
action: DeletePostsAttachmentsHookAction,
posts: Iterable[Union[Post, 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 posts.
See the action section for details.
An iterable of posts or their IDs.
The request object or None.
An int with the number of attachments marked for deletion.
def delete_posts_attachments_action(
posts: Iterable[Union[Post, int]], *, request: HttpRequest | None=None
) -> int:
...A standard function used by Misago to delete attachments associated with specified posts.
An iterable of posts 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_posts_attachments_hook
from misago.threads.models import Post
logger = logging.getLogger("attachments.delete")
@delete_posts_attachments_hook.append_filter
def log_delete_posts_attachments(
action,
posts: Iterable[Union[Post, int]],
*,
request: HttpRequest | None = None,
) -> int:
deleted = action(posts, request=request)
if request and request.user.is_authenticated:
user = f"#{request.user.id}: {request.user.username}"
else:
user = None
logger.info(
"Deleted posts attachments: %s",
str(deleted),
extra={"user": user},
)
return deleted