FileAttachmentThumbnailHook¶
reviewboard.extensions.hooks.FileAttachmentThumbnailHook
allows
extensions to create custom thumbnailers for new file types. This is
particularly useful when combined with Review UI Integration.
To use this, define a subclass of
reviewboard.attachments.mimetypes.MimetypeHandler
, where you’ll
define a list of supported_mimetypes
and a method for creating the
thumbnail:
Example¶
import logging
import pygments
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe
from reviewboard.attachments.mimetypes import MimetypeHandler
from reviewboard.extensions.base import Extension
from reviewboard.extensions.hooks import FileAttachmentThumbnailHook
class XMLMimetype(MimetypeHandler):
# Generate thumbnails for these mimetypes
supported_mimetypes = ['application/xml', 'text/xml']
def get_thumbnail(self):
# This renders the XML using pygments to syntax highlight it. The
# HTML will then be stuck inside the thumbnail element styled to
# use a small font and clipped to the size of the thumbnail box.
f = self.attachment.file.file
f.open()
try:
# Only use the first 2000 characters
data_string = f.read(2000)
except (ValueError, IOError), e:
logging.error('Failed to read from file attachment %s: %s'
% (self.attachment.pk, e))
f.close()
html = pygments.highlight(force_unicode(data_string),
pygments.lexers.XmlLexer(),
pygments.formatters.HtmlFormatter())
return mark_safe('<div class="file-thumbnail-clipped">%s</div>'
% html)
class XMLThumbnailExtension(Extension):
def initialize(self):
FileAttachmentThumbnailHook(self, [XMLMimetype])