From 2a51bc87b28fffef1a407e82b694969d5d67199d Mon Sep 17 00:00:00 2001 From: Bang Dao Date: Sun, 1 Mar 2015 00:33:01 +0700 Subject: [PATCH 1/2] Support django 1.7 on python 3.4.3 --- awesome_avatar/fields.py | 28 ++++++++++++++++++---------- awesome_avatar/forms.py | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/awesome_avatar/fields.py b/awesome_avatar/fields.py index f73032d..7419670 100644 --- a/awesome_avatar/fields.py +++ b/awesome_avatar/fields.py @@ -3,11 +3,15 @@ from django.core.files.uploadedfile import InMemoryUploadedFile from django.db import models from awesome_avatar import forms +from awesome_avatar.widgets import AvatarWidget try: from cStringIO import StringIO except ImportError: - from StringIO import StringIO + try: + from StringIO import StringIO + except ImportError: # python 3 + from io import BytesIO as StringIO try: from PIL import Image @@ -32,10 +36,16 @@ def __init__(self, *args, **kwargs): super(AvatarField, self).__init__(*args, **kwargs) def formfield(self, **kwargs): - defaults = {'form_class': forms.AvatarField} - defaults['width'] = self.width - defaults['height'] = self.height + defaults = { + 'form_class': forms.AvatarField, + 'width': self.width, + 'height': self.height, + } defaults.update(kwargs) + + # django 1.7 fix default widget + if not defaults.get('widget') or not isinstance(defaults.get('widget'), AvatarWidget): + defaults['widget'] = AvatarWidget return super(AvatarField, self).formfield(**defaults) def save_form_data(self, instance, data): @@ -43,15 +53,13 @@ def save_form_data(self, instance, data): file_ = data['file'] if file_: - image = Image.open(StringIO(file_.read())) + image = Image.open(file_) image = image.crop(data['box']) image = image.resize((self.width, self.height), Image.ANTIALIAS) - content = StringIO() - image.save(content, config.save_format, quality=config.save_quality) - file_name = u'{}.{}'.format(os.path.splitext(file_.name)[0], config.save_format) + new_data = InMemoryUploadedFile(StringIO(), None, file_name, 'image/' + config.save_format, 0, None) + + image.save(new_data, config.save_format, quality=config.save_quality) - # new_data = SimpleUploadedFile(file.name, content.getvalue(), content_type='image/' + config.save_format) - new_data = InMemoryUploadedFile(content, None, file_name, 'image/' + config.save_format, len(content.getvalue()), None) super(AvatarField, self).save_form_data(instance, new_data) diff --git a/awesome_avatar/forms.py b/awesome_avatar/forms.py index 71e4d4b..65219d5 100644 --- a/awesome_avatar/forms.py +++ b/awesome_avatar/forms.py @@ -17,4 +17,4 @@ def to_python(self, data): return data def widget_attrs(self, widget): - return {'width': self.width, 'height': self.height} \ No newline at end of file + return {'width': self.width, 'height': self.height} From 05a778acd3ff2a9ead369962b37e15c4a3876b23 Mon Sep 17 00:00:00 2001 From: Bang Dao Date: Sun, 1 Mar 2015 01:08:36 +0700 Subject: [PATCH 2/2] generate unique filename whenever upload --- awesome_avatar/fields.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/awesome_avatar/fields.py b/awesome_avatar/fields.py index 7419670..b685187 100644 --- a/awesome_avatar/fields.py +++ b/awesome_avatar/fields.py @@ -1,4 +1,5 @@ import os +import uuid from awesome_avatar.settings import config from django.core.files.uploadedfile import InMemoryUploadedFile from django.db import models @@ -57,7 +58,7 @@ def save_form_data(self, instance, data): image = image.crop(data['box']) image = image.resize((self.width, self.height), Image.ANTIALIAS) - file_name = u'{}.{}'.format(os.path.splitext(file_.name)[0], config.save_format) + file_name = u'{}.{}'.format(str(uuid.uuid1()), config.save_format) new_data = InMemoryUploadedFile(StringIO(), None, file_name, 'image/' + config.save_format, 0, None) image.save(new_data, config.save_format, quality=config.save_quality)