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)
Beispiel #7
0
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
Beispiel #10
0
 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 {}
Beispiel #11
0
    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)
Beispiel #14
0
"""

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("")
Beispiel #16
0
 def get_media_backend(self, media_type):
     return get_media_backend(fail_silently=True,
                              handles_media_types=(media_type, ))
Beispiel #17
0
 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)