Skip to content

Commit

Permalink
added crude bucket manipulatin functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Foulis committed Apr 23, 2009
1 parent 7dc1a97 commit b904259
Show file tree
Hide file tree
Showing 15 changed files with 172 additions and 92 deletions.
13 changes: 13 additions & 0 deletions image_filer/admin.py
Expand Up @@ -10,6 +10,19 @@ class ImageAdmin(admin.ModelAdmin):
list_display = ('label','admin_thumbnail', 'has_all_mandatory_data')
list_per_page = 10
search_fields = ['name', 'original_filename','default_alt_text','default_caption','usage_restriction_notes','notes']
fieldsets = (
(None, {
'fields': ('name', 'contact', 'owner', )
}),
('Copyright and Author', {
#'classes': ('collapse',),
'fields': ('author', 'must_always_publish_author_credit', 'must_always_publish_copyright')
}),
('Restrictions', {
#'classes': ('collapse',),
'fields': ('can_use_for_web', 'can_use_for_print','can_use_for_teaching','can_use_for_research','can_use_for_private_use')
}),
)
admin.site.register(Image, ImageAdmin)

class FolderAdmin(admin.ModelAdmin):
Expand Down
50 changes: 0 additions & 50 deletions image_filer/fields.py

This file was deleted.

1 change: 1 addition & 0 deletions image_filer/filters.py
Expand Up @@ -65,6 +65,7 @@ def render(self, im, size_x=128, size_y=64, crop=True, crop_from='top', upscale=
filters.append(ResizeFilter)
class TinyResizeFilterHack(ResizeFilter):
name = "Tiny Resize Filter Hack"
identifier = "resize_simple_tiny_hack"
def render(self, im, size_x=24, size_y=24, crop=True, crop_from='top', upscale=True):
return super(TinyResizeFilterHack, self).render(im, size_x=size_x, size_y=size_y)
filters.append(TinyResizeFilterHack)
Expand Down
25 changes: 15 additions & 10 deletions image_filer/models.py → image_filer/models/__init__.py 100755 → 100644
Expand Up @@ -7,8 +7,9 @@
from django.core.files.storage import FileSystemStorage
from django.utils.translation import ugettext_lazy as _
from datetime import datetime, date
from utils import EXIF
from fields import PickledObjectField
from image_filer.utils import EXIF
from image_filer import filters
from managers import FolderManager
from django.db.models.signals import post_init
from django.utils.functional import curry

Expand All @@ -29,7 +30,6 @@ def get_available_name(self, name):
return r
CATALOGUE_BASE_URL = "".join([settings.MEDIA_URL, 'catalogue/'])
CATALOGUE_BASE_PATH = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'catalogue/'))
print settings.MEDIA_URL
uuid_file_system_storage = UUIDFileSystemStorage(
location=CATALOGUE_BASE_PATH,
base_url=CATALOGUE_BASE_URL
Expand All @@ -49,7 +49,7 @@ class AbstractFile(models.Model):
file_type:
"""
file_type = 'unknown'
original_filename = models.CharField(editable=False, max_length=255, blank=True, null=True)
original_filename = models.CharField(max_length=255, blank=True, null=True)
name = models.CharField(max_length=255, null=True, blank=True)

owner = models.ForeignKey(auth_models.User, related_name='owned_files', null=True, blank=True)
Expand All @@ -67,7 +67,6 @@ def __unicode__(self):
class Meta:
abstract=True


class FolderRoot(object):
name = 'Root'

Expand Down Expand Up @@ -97,6 +96,8 @@ class Folder(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)

objects = FolderManager()

@property
def files(self):
# TODO: make this a "multi iterator" that can iterate over multiple
Expand Down Expand Up @@ -186,6 +187,9 @@ class Image(AbstractFile):

has_all_mandatory_data = models.BooleanField(default=False, editable=False)

def clone(self):
return Image(parent=self)

def render(self):
if not self.parent:
# if this is a root image rendering is forbidden... the original
Expand Down Expand Up @@ -620,7 +624,7 @@ class Meta:



import filters

FILTER_CHOICES = []
for filter in filters.filters:
FILTER_CHOICES.append( (filter.identifier, filter.name) )
Expand Down Expand Up @@ -671,7 +675,7 @@ class ImageManipulationStep(models.Model):
filter_identifier = models.CharField(max_length=255, choices=FILTER_CHOICES)
name = models.CharField(max_length=255, null=True, blank=True)
description = models.TextField(null=True, blank=True)
data = PickledObjectField(default={})
data = models.TextField(null=True, blank=True)#PickledObjectField(default={})
order = models.IntegerField(default=0)

def render(self, im):
Expand Down Expand Up @@ -706,7 +710,10 @@ def save(self, *args, **kwargs):
super(ImageManipulationTemplate, self).save(*args, **kwargs)
ImageManipulationTemplateCache().reset()
self.clear_cache()


def save(self, *args, **kwargs):

return super(ImageManipulationTemplate,self).save(*args,**kwargs)
def delete(self):
assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
self.clear_cache()
Expand Down Expand Up @@ -751,8 +758,6 @@ def empty(self):
item.delete()
empty.alters_data = True

def create_zip(self):
return 'zipfile'
def clone(self, to_folder=None):
pass
def set_image_manipulation_profile(self):
Expand Down
3 changes: 3 additions & 0 deletions image_filer/models/fields.py
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-

from django.db import models
7 changes: 7 additions & 0 deletions image_filer/models/managers.py
@@ -0,0 +1,7 @@
from django.db import models
from django.db.models import Q
from datetime import datetime

class FolderManager(models.Manager):
def with_bad_metadata(self):
return self.get_query_set().filter(has_all_mandatory_data=False)
29 changes: 29 additions & 0 deletions image_filer/models/tools.py
@@ -0,0 +1,29 @@
from image_filer.models import Bucket


def empty_bucket(bucket):
bucket.files.clear()

def get_user_bucket(user):
if user.is_authenticated():
bucket, was_bucket_created = Bucket.objects.get_or_create(user=user)
return bucket

def put_files_in_bucket(files, bucket):
for file in files:
bucket.append_file(file)
return True
def clone_files_from_bucket_to_folder(bucket, folder):
for file in bucket.files.all():
cloned_file = file.clone()
cloned_file.folder = folder
cloned_file.save()

def move_files_from_bucket_to_folder(bucket, folder):
return move_files_to_folder(bucket.files.all(), folder)

def move_files_to_folder(files, folder):
for file in files:
file.folder = folder
file.save()
return True
@@ -1,6 +1,6 @@
{% extends "admin/change_form.html" %}

{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/">Home</a><a href="/admin/image_filer/">Image Portfolio</a>{% if original.folder %} › <a href="{% url image_portfolio-directory_listing-root %}">Root</a>{% for ancestor_folder in original.folder.get_ancestors %} › <a href="{% url image_portfolio-directory_listing ancestor_folder.id %}">{{ ancestor_folder.name }}</a>{% endfor %} › <a href="{% url image_portfolio-directory_listing original.folder.id %}">{{ original.folder.name }}</a>{% endif %} › {{ original }}</div>{% endblock %}
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/">Home</a><a href="/admin/image_filer/">Image Portfolio</a>{% if original.folder %} › <a href="{% url image_filer-directory_listing-root %}">Root</a>{% for ancestor_folder in original.folder.get_ancestors %} › <a href="{% url image_filer-directory_listing ancestor_folder.id %}">{{ ancestor_folder.name }}</a>{% endfor %} › <a href="{% url image_filer-directory_listing original.folder.id %}">{{ original.folder.name }}</a>{% endif %} › {{ original }}</div>{% endblock %}

{% block coltype %}colMS{% endblock %}
{% block sidebar %}
Expand Down
4 changes: 2 additions & 2 deletions image_filer/templates/image_filer/directory_listing.html
Expand Up @@ -55,10 +55,10 @@
</tr>
{% endif %}{% endif %}
{% for file in folder_children %}
{% include "image_filer/include/folderlisting.html" %}
{% include "image_filer/include/row_folder.html" %}
{% endfor %}
{% for file in folder_files %}
{% include "image_filer/include/folderlisting.html" %}
{% include "image_filer/include/row_image.html" %}
{% endfor %}
{% comment %}
<tr>
Expand Down
20 changes: 18 additions & 2 deletions image_filer/templates/image_filer/include/bucket.html
Expand Up @@ -2,9 +2,25 @@
{% for bucket in user.buckets.all %}
<h1>Bucket {{ bucket.id }}</h1>
<ul>
{% for item in bucket.files.all %}<li>{% if item.get_bucket_thumbnail_url %}<img src="{{ item.get_bucket_thumbnail_url }}" alt="{{ item.default_alt_text }}" />{% endif %}{{ item.label }}<a href="{% url image_filer-move_files_to_folder %}?file_ids={{ item.id }}&folder_id={{ folder.id }}">move to folder</a></li>
{% for item in bucket.files.all %}<li>{% if item.get_bucket_thumbnail_url %}<img src="{{ item.get_bucket_thumbnail_url }}" alt="{{ item.default_alt_text }}" />{% endif %}{{ item.label }}</li>
{% endfor %}
</ul>
<a href="{% url image_filer-move_bucket_to_folder bucket.id%}?folder_id={{ folder.id }}">move files to current folder</a>
<form action="{% url image_filer-empty_bucket_in_folder %}" method="post">
<input type="hidden" name="folder_id" value="{{ folder.id }}" />
<input type="hidden" name="bucket_id" value="{{ bucket.id }}" />
<input type="hidden" name="redirect_to" value="{{ current_url }}" />
<input type="submit" value="empty to folder" />
</form>
<form action="{% url image_filer-clone_files_from_bucket_to_folder %}" method="post">
<input type="hidden" name="folder_id" value="{{ folder.id }}" />
<input type="hidden" name="bucket_id" value="{{ bucket.id }}" />
<input type="hidden" name="redirect_to" value="{{ current_url }}" />
<input type="submit" value="clone to folder" />
</form>
<form action="{% url image_filer-empty_bucket %}" method="post">
<input type="hidden" name="bucket_id" value="{{ bucket.id }}" />
<input type="hidden" name="redirect_to" value="{{ current_url }}" />
<input type="submit" value="empty" />
</form>
{% endfor %}

@@ -1,7 +1,7 @@
{% load adminmedia %}
{% load i18n %}

<tr>
<tr style="color: red;">
<!-- FileIcon -->
<td class="fb_icon"><img src="/media/filebrowser/img/filebrowser_type_{{ file.file_type|lower }}.gif" /></td>
<td>{% if file.get_admin_thumbnail_url %}<img src="{{ file.get_admin_thumbnail_url }}" alt="{{ file.default_alt_text }}" />{% endif %}</td>
Expand Down
18 changes: 18 additions & 0 deletions image_filer/templates/image_filer/include/row_folder.html
@@ -0,0 +1,18 @@
{% load adminmedia %}
{% load i18n %}

<tr>
<!-- FileIcon -->
<td class="fb_icon"><img src="/media/filebrowser/img/filebrowser_type_{{ file.file_type|lower }}.gif" /></td>
<td>{% if file.get_admin_thumbnail_url %}<img src="{{ file.get_admin_thumbnail_url }}" alt="{{ file.default_alt_text }}" />{% endif %}</td>
<!-- Filename/Dimensions -->
{% ifequal file.file_type 'Folder' %}
<td><b><a href="{% url image_filer-directory_listing file.id %}">{{ file.name }}</a></b></td>
{% else %}
<td><b><a href="/admin/image_filer/image/{{ file.id }}/">{{ file.name }}</a></b><br /><span class="tiny">{{ file.file.width }} x {{ file.file.height }} px</span></td>
{% endifequal %}
<td>{{ file.owner }}</td>
<td>{{ file.perms }}</td>
<td></td>
</tr>

20 changes: 20 additions & 0 deletions image_filer/templates/image_filer/include/row_image.html
@@ -0,0 +1,20 @@
{% load adminmedia %}
{% load i18n %}

<tr>
<!-- FileIcon -->
<td>{% if file.has_all_mandatory_data %}<img alt="0" src="/media/admin/img/admin/icon-yes.gif"/>{% else %}<img alt="1" src="/media/admin/img/admin/icon-no.gif"/>{% endif %}</td>
<td>{% if file.get_admin_thumbnail_url %}<img src="{{ file.get_admin_thumbnail_url }}" alt="{{ file.default_alt_text }}" />{% endif %}</td>
<!-- Filename/Dimensions -->
<td><b><a href="/admin/image_filer/image/{{ file.id }}/">{{ file.label }}</a></b><br /><span class="tiny">{{ file.file.width }} x {{ file.file.height }} px</span></td>
<td>{{ file.owner }}</td>
<td>{{ file.perms }}</td>
<td>{{ request }}
<form action="{% url image_filer-put_file_in_bucket %}" method="post">
<input type="hidden" name="file_id" value="{{ file.id }}" />
<input type="hidden" name="redirect_to" value="{{ current_url }}" />
<input type="submit" value="put in bucket" />
</form>
</td>
</tr>

8 changes: 6 additions & 2 deletions image_filer/urls.py
Expand Up @@ -8,8 +8,12 @@

url(r'^directory/(?P<folder_id>\d+)/upload/$', 'upload', name='image_filer-upload'),
url(r'^directory/upload/$', 'upload', name='image_filer-upload'),

#url(r'^file/move_to_folder/$', 'move_files_to_folder', name='image_filer-move_files_to_folder'),

url(r'^bucket/(?P<bucket_id>\d+)/move_to_folder/$', 'move_files_to_folder', name='image_filer-move_bucket_to_folder'),
url(r'^file/move_to_folder/$', 'move_files_to_folder', name='image_filer-move_files_to_folder'),
url(r'^operations/empty_bucket_in_folder/$', 'empty_bucket_in_folder', name='image_filer-empty_bucket_in_folder'),
url(r'^operations/clone_files_from_bucket_to_folder/$', 'clone_files_from_bucket_to_folder', name='image_filer-clone_files_from_bucket_to_folder'),
url(r'^operations/empty_bucket/$', 'empty_bucket', name='image_filer-empty_bucket'),
url(r'^operations/put_file_in_bucket/$', 'put_file_in_bucket', name='image_filer-put_file_in_bucket'),

)

0 comments on commit b904259

Please sign in to comment.