Extension Point : IAttachmentChangeListener
The IAttachmentChangeListener allows components to listen for and to react to attachment events.
Trac allows users to attach arbitrary files to e.g. tickets or wiki pages. Plugins can hook into the attachment module to trigger their own actions when attachments are added, deleted or moved (i.e. moved to another parent resource and / or renamed).
The main purpose for this interface is to allow plugins to stay informed about the existing attachments and trigger appropriate actions elsewhere (e.g. sending notifications, starting indexing services, updating supplementary data structures etc.)
(For attachment validation and manipulation use IAttachmentManipulator instead.)
When a user adds a new attachment the
attachment_added method is called. Similarly
attachment_deleted is called when a user deletes an attachment or its parent resource, and
attachment_moved is called when a user moves an attachment to a new parent resource or renames the attachment or the parent resource.
A common use case for attachments is to attach images to wiki pages. For convenience you might want to automatically append an Image macro to the wiki page. The following minimal example IAttachmentChangeListener implementation could implement such a feature:
from trac.core import Component, implements from trac.attachment import IAttachmentChangeListener from trac.mimeview.api import get_mimetype from trac.wiki.model import WikiPage class ImageAutoAppender(Component): implements(IAttachmentChangeListener) def attachment_added(self, attachment): if attachment.parent_realm != 'wiki': return mimetype = get_mimetype(attachment.filename) if not mimetype.startswith('image/'): return page = WikiPage(self.env, attachment.parent_id) page.text += '[[Image(%s)]]' % (attachment.filename,) page.save(attachment.author, 'Auto-append image', attachment.ipnr) def attachment_deleted(self, attachment): pass def attachment_moved(attachment, old_parent_realm, old_parent_id, old_filename): pass
- th:SearchAttachmentsPlugin: Search attachments
- th:ImageTracPlugin: Attach a ticket image
- th:TracCiaPlugin: CIA integration
Additional Information and References
- API Reference
- See trac.attachment.IAttachmentManipulator
- See trac.ticket.api.IMilestoneChangeListener, trac.versioncontrol.api.IRepositoryChangeListener, trac.ticket.api.ITicketChangeListener, trac.wiki.api.IWikiChangeListener
- Introduced in changeset:3399
- Attachments database schema
- Related tickets: