def edit_avatar(request): """Edit user avatar.""" try: user_profile = request.user.get_profile() except Profile.DoesNotExist: # TODO: Once we do user profile migrations, all users should have a # a profile. We can remove this fallback. user_profile = Profile.objects.create(user=request.user) if request.method == 'POST': # Upload new avatar and replace old one. old_avatar_path = None if user_profile.avatar: # Need to store the path, not the file here, or else django's # form.is_valid() messes with it. old_avatar_path = user_profile.avatar.path form = AvatarForm(request.POST, request.FILES, instance=user_profile) if form.is_valid(): if old_avatar_path: os.unlink(old_avatar_path) user_profile = form.save() content = _create_image_thumbnail(user_profile.avatar.path, settings.AVATAR_SIZE) # Delete uploaded avatar and replace with thumbnail. name = user_profile.avatar.name user_profile.avatar.delete() user_profile.avatar.save(name, content, save=True) return HttpResponseRedirect(reverse('users.edit_profile')) else: # request.method == 'GET' form = AvatarForm(instance=user_profile) return jingo.render(request, 'users/edit_avatar.html', {'form': form, 'profile': user_profile})
def edit_avatar(request, group_slug): """Edit group avatar.""" prof = get_object_or_404(GroupProfile, slug=group_slug) if not _user_can_edit(request.user, prof): raise PermissionDenied form = GroupAvatarForm(request.POST or None, request.FILES or None, instance=prof) old_avatar_path = None if prof.avatar and os.path.isfile(prof.avatar.path): # Need to store the path, or else django's # form.is_valid() messes with it. old_avatar_path = prof.avatar.path if request.method == 'POST' and form.is_valid(): # Upload new avatar and replace old one. if old_avatar_path: os.unlink(old_avatar_path) prof = form.save() content = _create_image_thumbnail(prof.avatar.path, settings.AVATAR_SIZE, pad=True) # We want everything as .png name = prof.avatar.name + ".png" # Delete uploaded avatar and replace with thumbnail. prof.avatar.delete() prof.avatar.save(name, content, save=True) return HttpResponseRedirect(prof.get_absolute_url()) return jingo.render(request, 'groups/edit_avatar.html', {'form': form, 'profile': prof})
def test_create_image_thumbnail_avatar(self): """An avatar is created from an image file.""" thumb_content = _create_image_thumbnail( 'apps/upload/tests/media/test.jpg', settings.AVATAR_SIZE, pad=True) actual_thumb = ImageFile(thumb_content) eq_(settings.AVATAR_SIZE, actual_thumb.width) eq_(settings.AVATAR_SIZE, actual_thumb.height)
def test_create_image_thumbnail_default(self): """A thumbnail is created from an image file.""" thumb_content = _create_image_thumbnail("apps/upload/tests/media/test.jpg") actual_thumb = ImageFile(thumb_content) with open("apps/upload/tests/media/test_thumb.jpg") as f: expected_thumb = ImageFile(f) eq_(expected_thumb.width, actual_thumb.width) eq_(expected_thumb.height, actual_thumb.height)
def test_create_image_thumbnail_default(self): """A thumbnail is created from an image file.""" thumb_content = _create_image_thumbnail( 'apps/upload/tests/media/test.jpg') actual_thumb = ImageFile(thumb_content) with open('apps/upload/tests/media/test_thumb.jpg') as f: expected_thumb = ImageFile(f) eq_(expected_thumb.width, actual_thumb.width) eq_(expected_thumb.height, actual_thumb.height)