X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/feee71de06ace01f793c2c8adf9cce65b9df2cec..8132fc186eb0c5fd02c86828c3a4735754296d02:/apps/cover/forms.py diff --git a/apps/cover/forms.py b/apps/cover/forms.py index 5cc316b2..513bdefb 100755 --- a/apps/cover/forms.py +++ b/apps/cover/forms.py @@ -3,12 +3,16 @@ # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from StringIO import StringIO + from django import forms +from django.conf import settings from django.utils.translation import ugettext_lazy as _, ugettext from cover.models import Image from django.utils.text import mark_safe +from PIL import Image as PILImage -from cover.utils import get_flickr_data, FlickrError +from cover.utils import get_flickr_data, FlickrError, URLOpener class ImageAddForm(forms.ModelForm): @@ -32,10 +36,31 @@ class ImageAddForm(forms.ModelForm): % {'url': img.get_absolute_url()})) return cl + def clean_source_url(self): + source_url = self.cleaned_data['source_url'] or None + if source_url is not None: + same_source = Image.objects.filter(source_url=source_url) + if same_source: + raise forms.ValidationError(mark_safe( + ugettext('Image already in repository' + % same_source.first().get_absolute_url()))) + return source_url + def clean(self): cleaned_data = super(ImageAddForm, self).clean() - if not cleaned_data.get('download_url', None) and not cleaned_data.get('file', None): - raise forms.ValidationError('No image specified') + download_url = cleaned_data.get('download_url', None) + uploaded_file = cleaned_data.get('file', None) + if not download_url and not uploaded_file: + raise forms.ValidationError(ugettext('No image specified')) + if download_url: + image_data = URLOpener().open(download_url).read() + width, height = PILImage.open(StringIO(image_data)).size + else: + width, height = PILImage.open(uploaded_file.file).size + min_width, min_height = settings.MIN_COVER_SIZE + if width < min_width or height < min_height: + raise forms.ValidationError(ugettext('Image too small: %sx%s, minimal dimensions %sx%s') % + (width, height, min_width, min_height)) return cleaned_data @@ -45,6 +70,15 @@ class ImageEditForm(forms.ModelForm): model = Image exclude = ['download_url'] + def clean(self): + cleaned_data = super(ImageEditForm, self).clean() + uploaded_file = cleaned_data.get('file', None) + width, height = PILImage.open(uploaded_file.file).size + min_width, min_height = settings.MIN_COVER_SIZE + if width < min_width or height < min_height: + raise forms.ValidationError(ugettext('Image too small: %sx%s, minimal dimensions %sx%s') % + (width, height, min_width, min_height)) + class ReadonlyImageEditForm(ImageEditForm): """Form used for not editing an Image."""