def icon_src(self, instance): media_backend = get_media_backend( fail_silently=False, handles_media_types=(media_types.SUPPORTED_IMAGE, )) thumb = media_backend.get_thumbnail(instance.node.file, {'size': (200, 200)}) return thumb.url
def admin_preview(self, node, icons_only=False): request = get_current_request() template = 'admin/media_tree/filenode/includes/preview.html' thumbnail_backend = get_media_backend(handles_media_types=(node.media_type,), supports_thumbnails=True) if not thumbnail_backend: icons_only = True template = 'media_tree/filenode/includes/icon.html' # TODO SPLIT preview.html in two: one that doesn't need media backend! context = { 'node': node, 'preview_file': node.get_icon_file() if icons_only else node.get_preview_file(), 'class': 'collapsed' if node.is_folder() else '', } if not icons_only: thumb_size_key = get_request_attr(request, 'thumbnail_size') or 'default' context['thumbnail_size'] = app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES[thumb_size_key] thumb = thumbnail_backend.get_thumbnail(context['preview_file'], {'size': context['thumbnail_size']}) context['thumb'] = thumb preview = render_to_string(template, context) if node.is_folder(): preview += render_to_string(template, { 'node': node, 'preview_file': node.get_preview_file(default_name='_folder_expanded'), 'class': 'expanded' }) return preview
def render(self, name, value, attrs=None): output = super(ThumbnailMixin, self).render(name, value, attrs) media_backend = get_media_backend( fail_silently=True, handles_media_types=( media_types.SUPPORTED_IMAGE,)) value = self.get_thumbnail_source(value) if media_backend and value: try: thumb_extension = \ os.path.splitext(value.name)[1].lstrip('.').lower() if not thumb_extension in THUMBNAIL_EXTENSIONS: thumb_extension = None thumb = media_backend.get_thumbnail( value, {'size': THUMBNAIL_SIZE}) if thumb: thumb_html = \ u'<img src="%s" alt="%s" width="%i" height="%i" />' % ( thumb.url, os.path.basename(value.name), thumb.width, thumb.height) output = u'<div><div class="thumbnail">%s</div>' \ '<p>%s</p></div>' % (thumb_html, output) except ThumbnailError as inst: pass return mark_safe(output)
def admin_preview(self, node, icons_only=False): request = get_current_request() template = 'admin/media_tree/filenode/includes/preview.html' if not get_media_backend(): icons_only = True template = 'media_tree/filenode/includes/icon.html' # TODO SPLIT preview.html in two: one that doesn't need media backend! thumb_size_key = get_request_attr(request, 'thumbnail_size') or 'default' preview = render_to_string( template, { 'node': node, 'preview_file': node.get_icon_file() if icons_only else node.get_preview_file(), 'class': 'collapsed' if node.is_folder() else '', 'thumbnail_size': app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES[thumb_size_key] }) if node.is_folder(): preview += render_to_string( template, { 'node': node, 'preview_file': node.get_preview_file(default_name='_folder_expanded'), 'class': 'expanded' }) return preview
def clear_cache(modeladmin, request, queryset=None): """ """ from unicodedata import normalize execute = request.POST.get('execute') files_in_storage = [] storage = get_media_storage() cache_files_choices = [] for cache_dir in get_media_backend().get_cache_paths(): if storage.exists(cache_dir): files_in_dir = [storage.path(os.path.join(cache_dir, filename)) \ for filename in storage.listdir(cache_dir)[1]] for file_path in files_in_dir: # need to normalize unicode path due to https://code.djangoproject.com/ticket/16315 file_path = normalize('NFC', file_path) storage_name = os.path.join(cache_dir, os.path.basename(file_path)) link = mark_safe('<a href="%s">%s</a>' % ( storage.url(storage_name), storage_name)) cache_files_choices.append((storage_name, link)) if not len(cache_files_choices): #request.user.message_set.create(message=_('There are no cache files.')) return HttpResponseRedirect('') if execute: form = DeleteCacheFilesForm(queryset, cache_files_choices, request.POST) if form.is_valid(): form.save() node = FileNode.get_top_node() message = ungettext('Deleted %i cache file.', 'Deleted %i cache files.', len(form.success_files)) % len(form.success_files) if len(form.success_files) == len(cache_files_choices): message = '%s %s' % (_('The cache was cleared.'), message) #request.user.message_set.create(message=message) if form.error_files: pass #request.user.message_set.create(message=_('The following files could not be deleted:')+' '+repr(form.error_files)) return HttpResponseRedirect(node.get_admin_url()) if not execute: if len(cache_files_choices) > 0: form = DeleteCacheFilesForm(queryset, cache_files_choices) else: form = None c = get_actions_context(modeladmin) c.update({ 'title': _('Clear cache'), 'submit_label': _('Delete selected files'), 'form': form, 'select_all': 'selected_files', }) return render_to_response('admin/media_tree/filenode/actions_form.html', c, context_instance=RequestContext(request)) return HttpResponseRedirect('')
def render(self, name, value, attrs=None): output = super(AdminThumbWidget, self).render(name, value, attrs) media_backend = get_media_backend(fail_silently=True, handles_media_types=( media_types.SUPPORTED_IMAGE,)) if media_backend and value and hasattr(value, "url"): try: thumb_extension = os.path.splitext(value.name)[1].lstrip('.').lower() if not thumb_extension in THUMBNAIL_EXTENSIONS: thumb_extension = None thumb = media_backend.get_thumbnail(value, {'size': THUMBNAIL_SIZE}) if thumb: thumb_html = u'<img src="%s" alt="%s" width="%i" height="%i" />' % (thumb.url, os.path.basename(value.name), thumb.width, thumb.height) output = u'<div><p><span class="thumbnail">%s</span></p><p>%s</p></div>' % (thumb_html, output) except ThumbnailError as inst: pass return mark_safe(output)
def get_cache_files(): storage = get_media_storage() cache_files = [] for cache_dir in get_media_backend().get_cache_paths(): if storage.exists(cache_dir): files_in_dir = [storage.path(os.path.join(cache_dir, filename)) \ for filename in storage.listdir(cache_dir)[1]] for file_path in files_in_dir: # need to normalize unicode path due to https://code.djangoproject.com/ticket/16315 file_path = normalize('NFC', file_path) storage_name = os.path.join(cache_dir, os.path.basename(file_path)) cache_files.append(storage_name) return cache_files
def init_changelist_view_options(self, request): if 'thumbnail_size' in request.GET: request.GET = request.GET.copy() thumb_size_key = request.GET.get('thumbnail_size') del request.GET['thumbnail_size'] if not thumb_size_key in app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES: thumb_size_key = None request.session['thumbnail_size'] = thumb_size_key thumb_size_key = request.session.get('thumbnail_size', 'default') set_request_attr(request, 'thumbnail_size', thumb_size_key) backend = get_media_backend() if backend and backend.supports_thumbnails(): return { 'thumbnail_sizes': app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES, 'thumbnail_size_key': thumb_size_key } else: return {}
def admin_preview(self, node, icons_only=False): template = 'admin/media_tree/filenode/includes/preview.html' if not get_media_backend(): icons_only = True template = 'media_tree/filenode/includes/icon.html' # TODO SPLIT preview.html in two: one that doesn't need media backend! preview = render_to_string(template, { 'node': node, 'preview_file': node.get_icon_file() if icons_only else node.get_preview_file(), 'class': 'collapsed' if node.is_folder() else '' }) if node.is_folder(): preview += render_to_string(template, { 'node': node, 'preview_file': node.get_preview_file(default_name='_folder_expanded'), 'class': 'expanded' }) return preview
def admin_preview(self, node, icons_only=False): request = get_current_request() template = 'admin/media_tree/filenode/includes/preview.html' thumbnail_backend = get_media_backend( handles_media_types=(node.media_type, ), supports_thumbnails=True) if not thumbnail_backend: icons_only = True template = 'media_tree/filenode/includes/icon.html' # TODO SPLIT preview.html in two: one that doesn't need media backend! context = { 'node': node, 'preview_file': node.get_icon_file() if icons_only else node.get_preview_file(), 'class': 'collapsed' if node.is_folder() else '', } if not icons_only: thumb_size_key = get_request_attr(request, 'thumbnail_size') or 'default' context[ 'thumbnail_size'] = app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES[ thumb_size_key] thumb = thumbnail_backend.get_thumbnail( context['preview_file'], {'size': context['thumbnail_size']}) context['thumb'] = thumb preview = render_to_string(template, context) if node.is_folder(): preview += render_to_string( template, { 'node': node, 'preview_file': node.get_preview_file(default_name='_folder_expanded'), 'class': 'expanded' }) return preview
def admin_preview(self, node, icons_only=False): request = get_current_request() template = 'admin/media_tree/filenode/includes/preview.html' if not get_media_backend(): icons_only = True template = 'media_tree/filenode/includes/icon.html' # TODO SPLIT preview.html in two: one that doesn't need media backend! thumb_size_key = get_request_attr(request, 'thumbnail_size') or 'default' preview = render_to_string(template, { 'node': node, 'preview_file': node.get_icon_file() if icons_only else node.get_preview_file(), 'class': 'collapsed' if node.is_folder() else '', 'thumbnail_size': app_settings.MEDIA_TREE_ADMIN_THUMBNAIL_SIZES[thumb_size_key] }) if node.is_folder(): preview += render_to_string(template, { 'node': node, 'preview_file': node.get_preview_file(default_name='_folder_expanded'), 'class': 'expanded' }) return preview
from media_tree import settings as app_settings from media_tree.models import FileNode from media_tree.media_backends import get_media_backend from media_tree import media_types from django.conf import settings from django import template from django.template import Library, Node, VariableDoesNotExist, \ TemplateSyntaxError from django.utils.html import escape import re THUMBNAIL_SIZES = app_settings.MEDIA_TREE_THUMBNAIL_SIZES RE_SIZE = re.compile(r'(\d+)x(\d+)$') MEDIA_BACKEND = get_media_backend(fail_silently=False, handles_media_types=( media_types.SUPPORTED_IMAGE,)) VALID_OPTIONS = MEDIA_BACKEND.get_valid_thumbnail_options() if MEDIA_BACKEND else {} register = template.Library() class ThumbnailSizeNode(template.Node): def __init__(self, size_name=None, context_name=None): if size_name: self.size_name = template.Variable(size_name) else: self.size_name = None self.context_name = context_name def render(self, context): if self.size_name: size_name = self.size_name.resolve(context)
""" from media_tree import settings as app_settings from media_tree.models import FileNode from media_tree.media_backends import get_media_backend from media_tree import media_types from django.conf import settings from django import template from django.template import Library, Node, VariableDoesNotExist, \ TemplateSyntaxError from django.utils.html import escape import re THUMBNAIL_SIZES = app_settings.MEDIA_TREE_THUMBNAIL_SIZES RE_SIZE = re.compile(r'(\d+)x(\d+)$') MEDIA_BACKEND = get_media_backend( fail_silently=False, handles_media_types=(media_types.SUPPORTED_IMAGE, )) VALID_OPTIONS = MEDIA_BACKEND.get_valid_thumbnail_options( ) if MEDIA_BACKEND else {} register = template.Library() class ThumbnailSizeNode(template.Node): def __init__(self, size_name=None, context_name=None): if size_name: self.size_name = template.Variable(size_name) else: self.size_name = None self.context_name = context_name def render(self, context): if self.size_name:
def clear_cache(modeladmin, request, queryset=None): """ """ from unicodedata import normalize execute = request.POST.get("execute") files_in_storage = [] storage = get_media_storage() cache_files_choices = [] for cache_dir in get_media_backend().get_cache_paths(): if storage.exists(cache_dir): files_in_dir = [ storage.path(os.path.join(cache_dir, filename)) for filename in storage.listdir(cache_dir)[1] ] for file_path in files_in_dir: # need to normalize unicode path due to https://code.djangoproject.com/ticket/16315 file_path = normalize("NFC", file_path) storage_name = os.path.join(cache_dir, os.path.basename(file_path)) link = mark_safe('<a href="%s">%s</a>' % (storage.url(storage_name), storage_name)) cache_files_choices.append((storage_name, link)) if not len(cache_files_choices): messages.warning(request, message=_("There are no cache files.")) return HttpResponseRedirect("") if execute: form = DeleteCacheFilesForm(queryset, cache_files_choices, request.POST) if form.is_valid(): form.save() node = FileNode.get_top_node() message = ungettext("Deleted %i cache file.", "Deleted %i cache files.", len(form.success_files)) % len( form.success_files ) if len(form.success_files) == len(cache_files_choices): message = "%s %s" % (_("The cache was cleared."), message) messages.success(request, message=message) if form.error_files: messages.error( request, message=_("The following files could not be deleted:") + " " + repr(form.error_files) ) return HttpResponseRedirect(node.get_admin_url()) if not execute: if len(cache_files_choices) > 0: form = DeleteCacheFilesForm(queryset, cache_files_choices) else: form = None c = get_actions_context(modeladmin) c.update( { "title": _("Clear cache"), "submit_label": _("Delete selected files"), "form": form, "select_all": "selected_files", } ) return render_to_response( "admin/media_tree/filenode/actions_form.html", c, context_instance=RequestContext(request) ) return HttpResponseRedirect("")
def get_media_backend(self, media_type): return get_media_backend(fail_silently=True, handles_media_types=(media_type, ))
def get_media_backend(self, media_type): return get_media_backend(fail_silently=True, handles_media_types=( media_type,))
def icon_src(self, instance): media_backend = get_media_backend(fail_silently=False, handles_media_types=( media_types.SUPPORTED_IMAGE,)) thumb = media_backend.get_thumbnail(instance.node.file, {'size': (200, 200)}) return thumb.url
from media_tree import settings as app_settings from media_tree.models import FileNode from media_tree.media_backends import get_media_backend from media_tree import media_types from django.conf import settings from django import template from django.template import Library, Node, VariableDoesNotExist, TemplateSyntaxError from django.utils.html import escape import re THUMBNAIL_SIZES = app_settings.MEDIA_TREE_THUMBNAIL_SIZES RE_SIZE = re.compile(r"(\d+)x(\d+)$") # MEDIA_BACKEND = get_media_backend(fail_silently=False, handles_media_types=( # media_types.SUPPORTED_IMAGE,)) MEDIA_BACKEND = get_media_backend(fail_silently=False, supports_thumbnails=True) VALID_OPTIONS = MEDIA_BACKEND.get_valid_thumbnail_options() if MEDIA_BACKEND else {} register = template.Library() class ThumbnailSizeNode(template.Node): def __init__(self, size_name=None, context_name=None): if size_name: self.size_name = template.Variable(size_name) else: self.size_name = None self.context_name = context_name def render(self, context): if self.size_name: size_name = self.size_name.resolve(context)