Skip to content

Commit

Permalink
Fix unique constraint validation in new album create, add extra dimen…
Browse files Browse the repository at this point in the history
…sion for thumbs generation
  • Loading branch information
sergei-maertens committed Oct 21, 2015
1 parent 92085d3 commit 325d621
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 11 deletions.
1 change: 1 addition & 0 deletions requirements/base.txt
Expand Up @@ -9,6 +9,7 @@ wsgiref==0.1.2

# Django packages
Django==1.8.4
django-appconf-1.0.1 # pulled in by other packages, but update version
django-choices==1.4.2
django-admin-tools==0.6.0
django-autoslug==1.8.0
Expand Down
11 changes: 11 additions & 0 deletions src/brouwers/albums/forms.py
Expand Up @@ -39,9 +39,20 @@ class Meta:
)

def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(AlbumForm, self).__init__(*args, **kwargs)
self.fields['category'].queryset = Category.objects.filter(public=True)

def clean(self):
cleaned_data = super(AlbumForm, self).clean()
title = cleaned_data.get('title')
if title:
qs = self._meta.model.objects.filter(title=title, user=self.user)
if qs.exists():
msg = _('You already have an album with this title.')
cleaned_data = self.add_error('title', forms.ValidationError(msg))
return cleaned_data


class AlbumRestoreForm(forms.ModelForm):
class Meta:
Expand Down
9 changes: 8 additions & 1 deletion src/brouwers/albums/management/commands/generate_thumbs.py
@@ -1,7 +1,11 @@
import logging

from django.core.management.base import NoArgsCommand

from sorl.thumbnail import get_thumbnail

logger = logging.getLogger(__name__)


class Command(NoArgsCommand):

Expand All @@ -17,4 +21,7 @@ def handle_noargs(self, *args, **options):

for photo in Photo.objects.all():
for size in self.sizes:
get_thumbnail(photo.image, size)
try:
get_thumbnail(photo.image, size, upscale=False)
except Exception as e:
logger.exception(e)
1 change: 1 addition & 0 deletions src/brouwers/albums/signals.py
Expand Up @@ -30,6 +30,7 @@ def generate_photo_thumbs(sender, instance, created, raw, **kwargs):

sizes = (
'300x225',
'1280',
'1280x1280',
'1024x1024',
)
Expand Down
18 changes: 18 additions & 0 deletions src/brouwers/albums/tests/test_crud.py
@@ -1,4 +1,5 @@
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _

from django_webtest import WebTest

Expand Down Expand Up @@ -43,6 +44,23 @@ def test_album_create(self):
self.assertEqual(album.title, 'My first album')
self.assertEqual(album.description, 'Dummy description')

def test_album_create_same_title(self):
url = reverse('albums:create')
create = self.app.get(url, user=self.user)
self.assertEqual(create.status_code, 200)
create.form['title'] = 'My album'

response = create.form.submit()
self.assertEqual(Album.objects.count(), 1)

# submit again
response = create.form.submit()
self.assertEqual(response.status_code, 200)
self.assertFormError(
response, 'form', 'title',
_('You already have an album with this title.')
)

def test_preferences_update(self):
url = reverse('albums:settings')
self._test_login_required(url)
Expand Down
5 changes: 5 additions & 0 deletions src/brouwers/albums/views/edit.py
Expand Up @@ -36,6 +36,11 @@ class AlbumCreateView(LoginRequiredMixin, CreateView):
template_name = 'albums/album/create.html'
success_url = reverse_lazy('albums:upload')

def get_form_kwargs(self):
kwargs = super(AlbumCreateView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs

def get_initial(self):
initial = super(AlbumCreateView, self).get_initial()
initial.setdefault('title', "album %s" % timezone.now().strftime("%d-%m-%Y"))
Expand Down
11 changes: 3 additions & 8 deletions src/conf/settings/base.py
@@ -1,4 +1,5 @@
import os
from django.utils.translation import ugettext_lazy as _

# Automatically figure out the PROJECT DIR
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
Expand All @@ -9,24 +10,18 @@
#
SITE_ID = 1
DEBUG = False
TEMPLATE_DEBUG = False
DEVELOPMENT = False
TESTING = False

ADMINS = ()

#
# TIMEZONE/LOCALISATION/TRANSLATION
#
gettext_noop = lambda s: s

TIME_ZONE = 'Europe/Amsterdam'
USE_TZ = True

USE_I18N = True
LANGUAGES = (
('en', gettext_noop('English')),
('nl', gettext_noop('Dutch')),
('en', _('English')),
('nl', _('Dutch')),
)
LOCALE_PATHS = (
os.path.join(PROJECT_DIR, 'locale'),
Expand Down
2 changes: 1 addition & 1 deletion src/conf/settings/development.py
Expand Up @@ -9,7 +9,7 @@


DEBUG = True
TEMPLATE_DEBUG = True
TEMPLATES[0]['OPTIONS']['debug'] = True

#
# Debug toolbar
Expand Down
1 change: 0 additions & 1 deletion src/conf/settings/travis.py
@@ -1,7 +1,6 @@
from .base import *

DEBUG = False
TEMPLATE_DEBUG = False

SECRET_KEY = 'uz1k)y8-)wxf5-(o43!(*+cnk6yd1ci1e4*@x$tad+0!dy)58+'

Expand Down

0 comments on commit 325d621

Please sign in to comment.