Skip to content

Commit

Permalink
Merge pull request #682 from romolox/move_thumbnail_option
Browse files Browse the repository at this point in the history
Move thumbnail option
  • Loading branch information
yakky committed Feb 5, 2016
2 parents 337b57c + 579ebe0 commit 4659fd5
Show file tree
Hide file tree
Showing 9 changed files with 227 additions and 6 deletions.
4 changes: 3 additions & 1 deletion filer/admin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
from filer.admin.fileadmin import FileAdmin
from filer.admin.folderadmin import FolderAdmin
from filer.admin.imageadmin import ImageAdmin
from filer.admin.thumbnailoptionadmin import ThumbnailOptionAdmin
from filer.admin.permissionadmin import PermissionAdmin
from filer.models import FolderPermission, Folder, File, Clipboard, Image
from filer.models import FolderPermission, Folder, File, Clipboard, Image, ThumbnailOption


admin.site.register(Folder, FolderAdmin)
admin.site.register(File, FileAdmin)
admin.site.register(Clipboard, ClipboardAdmin)
admin.site.register(Image, ImageAdmin)
admin.site.register(FolderPermission, PermissionAdmin)
admin.site.register(ThumbnailOption, ThumbnailOptionAdmin)
5 changes: 1 addition & 4 deletions filer/admin/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,10 @@
from django.db import models
from django.utils.translation import ugettext as _

from filer.models import ThumbnailOption
from filer.utils.files import get_valid_filename


if 'cmsplugin_filer_image' in settings.INSTALLED_APPS:
from cmsplugin_filer_image.models import ThumbnailOption


class AsPWithHelpMixin(object):
def as_p_with_help(self):
"Returns this form rendered as HTML <p>s with help text formated for admin."
Expand Down
5 changes: 5 additions & 0 deletions filer/admin/thumbnailoptionadmin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin


class ThumbnailOptionAdmin(admin.ModelAdmin):
list_display = ('name', 'width', 'height')
30 changes: 30 additions & 0 deletions filer/migrations/0003_thumbnailoption.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('filer', '0002_auto_20150606_2003'),
]

operations = [
migrations.CreateModel(
name='ThumbnailOption',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100, verbose_name='name')),
('width', models.IntegerField(help_text='width in pixel.', verbose_name='width')),
('height', models.IntegerField(help_text='height in pixel.', verbose_name='height')),
('crop', models.BooleanField(default=True, verbose_name='crop')),
('upscale', models.BooleanField(default=True, verbose_name='upscale')),
],
options={
'ordering': ('width', 'height'),
'verbose_name': 'thumbnail option',
'verbose_name_plural': 'thumbnail options',
},
),
]
1 change: 1 addition & 0 deletions filer/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
from filer.models.filemodels import * # flake8: noqa
from filer.models.foldermodels import * # flake8: noqa
from filer.models.imagemodels import * # flake8: noqa
from filer.models.thumbnailoptionmodels import * # flake8: noqa
from filer.models.virtualitems import * # flake8: noqa
1 change: 1 addition & 0 deletions filer/models/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
raise ImportError("The Python Imaging Library was not found.")

import logging

logger = logging.getLogger(__name__)


Expand Down
41 changes: 41 additions & 0 deletions filer/models/thumbnailoptionmodels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from __future__ import unicode_literals

from django.utils.translation import ugettext_lazy as _
from django.db import models
from filer.utils.compatibility import python_2_unicode_compatible


@python_2_unicode_compatible
class ThumbnailOption(models.Model):
"""
This class defines the option use to create the thumbnail.
"""
name = models.CharField(_("name"), max_length=100)
width = models.IntegerField(_("width"), help_text=_('width in pixel.'))
height = models.IntegerField(_("height"), help_text=_('height in pixel.'))
crop = models.BooleanField(_("crop"), default=True)
upscale = models.BooleanField(_("upscale"), default=True)

class Meta:
app_label = 'filer'
ordering = ('width', 'height')
verbose_name = _("thumbnail option")
verbose_name_plural = _("thumbnail options")

def __str__(self):
return '%s -- %s x %s' % (self.name, self.width, self.height)

@property
def as_dict(self):
"""
This property returns a dictionary suitable for Thumbnailer.get_thumbnail()
Sample code:
# thumboption_obj is a ThumbnailOption instance
# filerimage is a Image instance
option_dict = thumboption_obj.as_dict
thumbnailer = filerimage.easy_thumbnails_thumbnailer
thumb_image = thumbnailer.get_thumbnail(option_dict)
"""
return {"size": (self.width, self.height), "width": self.width,
"height": self.height, "crop": self.crop, "upscale": self.upscale}
144 changes: 144 additions & 0 deletions filer/south_migrations/0015_auto__add_thumbnailoption.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding model 'ThumbnailOption'
db.create_table(u'filer_thumbnailoption', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
('width', self.gf('django.db.models.fields.IntegerField')()),
('height', self.gf('django.db.models.fields.IntegerField')()),
('crop', self.gf('django.db.models.fields.BooleanField')(default=True)),
('upscale', self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal(u'filer', ['ThumbnailOption'])


def backwards(self, orm):
# Deleting model 'ThumbnailOption'
db.delete_table(u'filer_thumbnailoption')


models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'filer.clipboard': {
'Meta': {'object_name': 'Clipboard'},
'files': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'in_clipboards'", 'symmetrical': 'False', 'through': u"orm['filer.ClipboardItem']", 'to': u"orm['filer.File']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'filer_clipboards'", 'to': u"orm['auth.User']"})
},
u'filer.clipboarditem': {
'Meta': {'object_name': 'ClipboardItem'},
'clipboard': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['filer.Clipboard']"}),
'file': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['filer.File']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'all_files'", 'null': 'True', 'to': u"orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'polymorphic_filer.file_set+'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
u'filer.folder': {
'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'parent', u'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'children'", 'null': 'True', 'to': u"orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
u'filer.folderpermission': {
'Meta': {'object_name': 'FolderPermission'},
'can_add_children': ('django.db.models.fields.SmallIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
'can_edit': ('django.db.models.fields.SmallIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
'can_read': ('django.db.models.fields.SmallIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
'everybody': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['filer.Folder']", 'null': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'filer_folder_permissions'", 'null': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'filer_folder_permissions'", 'null': 'True', 'to': u"orm['auth.User']"})
},
'filer.image': {
'Meta': {'object_name': 'Image'},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
},
u'filer.thumbnailoption': {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'upscale': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'width': ('django.db.models.fields.IntegerField', [], {})
}
}

complete_apps = ['filer']
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ commands =
commands =
{envpython} --version
- coverage erase
coverage run --rcfile=coverage.rc test_settings.py {posargs}
coverage run --timid --rcfile=coverage.rc test_settings.py {posargs}
- coverage report
setenv =
custom_image: CUSTOM_IMAGE=filer.test_utils.custom_image.models.Image
Expand Down

0 comments on commit 4659fd5

Please sign in to comment.