From 21f8e23f2670fd241a6e467c55766b5fef9b3f80 Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 11:14:35 +0100 Subject: [PATCH 1/7] Fall back to using the file extension in the thumnail URL as storage backends like S3 don't have a path attribute --- easy_thumbnails/optimize/post_processor.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index 360a8efa..2807f5e7 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -37,8 +37,13 @@ def check_output(*popenargs, **kwargs): def optimize_thumbnail(thumbnail): '''Optimize thumbnail images by removing unnecessary data''' try: - optimize_command = settings.THUMBNAIL_OPTIMIZE_COMMAND[ - determinetype(thumbnail.path)] + if thumbnail.path: + file_type = determinetype(thumbnail.path) + else: + file_type = os.path.splitext(thumbnail.url)[1:] + if file_type == 'jpg': + file_type = 'jpeg' + optimize_command = settings.THUMBNAIL_OPTIMIZE_COMMAND[file_type] if not optimize_command: return except (TypeError, KeyError, NotImplementedError): From 976deaf26c2411879ae63445ca5666d017f66710 Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 11:36:53 +0100 Subject: [PATCH 2/7] Fix for NotImplementedError --- easy_thumbnails/optimize/post_processor.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index 2807f5e7..bea6b3bc 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -37,17 +37,18 @@ def check_output(*popenargs, **kwargs): def optimize_thumbnail(thumbnail): '''Optimize thumbnail images by removing unnecessary data''' try: - if thumbnail.path: - file_type = determinetype(thumbnail.path) - else: - file_type = os.path.splitext(thumbnail.url)[1:] + file_type = determinetype(thumbnail.path) + except NotImplementedError: + file_type = os.path.splitext(thumbnail.url)[1:] if file_type == 'jpg': file_type = 'jpeg' + except (TypeError, KeyError): + return + finally: optimize_command = settings.THUMBNAIL_OPTIMIZE_COMMAND[file_type] if not optimize_command: return - except (TypeError, KeyError, NotImplementedError): - return + storage = thumbnail.storage try: with NamedTemporaryFile() as temp_file: From 6db679243933581c9789b13846abf03d459993be Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 11:40:27 +0100 Subject: [PATCH 3/7] Added missing import --- easy_thumbnails/optimize/post_processor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index bea6b3bc..375c4584 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import logging +import os import subprocess from imghdr import what as determinetype from django.core.files.base import ContentFile From 85e3174f8f214601281173632848386013e3264f Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 11:45:23 +0100 Subject: [PATCH 4/7] Fix to path splitting --- easy_thumbnails/optimize/post_processor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index 375c4584..25342d11 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -40,7 +40,7 @@ def optimize_thumbnail(thumbnail): try: file_type = determinetype(thumbnail.path) except NotImplementedError: - file_type = os.path.splitext(thumbnail.url)[1:] + file_type = os.path.splitext(thumbnail.url)[1][1:] if file_type == 'jpg': file_type = 'jpeg' except (TypeError, KeyError): From 042466981daab38118c36ce90d268c26e6928b78 Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 11:59:25 +0100 Subject: [PATCH 5/7] Attempt to save back to file storage --- easy_thumbnails/optimize/post_processor.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index 25342d11..a7e96d9b 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -40,6 +40,7 @@ def optimize_thumbnail(thumbnail): try: file_type = determinetype(thumbnail.path) except NotImplementedError: + # System is using an alternative storage backend file_type = os.path.splitext(thumbnail.url)[1][1:] if file_type == 'jpg': file_type = 'jpeg' @@ -65,8 +66,8 @@ def optimize_thumbnail(thumbnail): else: logger.info('{0} returned nothing'.format(optimize_command)) with open(temp_file.name, 'rb') as f: - thumbnail.file = ContentFile(f.read()) - storage.delete(thumbnail.path) - storage.save(thumbnail.path, thumbnail) + thumbnail.file.open() + thumbnail.file.write(f.read()) + thumbnail.flush() except Exception as e: logger.error(e) From 89fc3798893c37c279a667f8f6b178b51cc207da Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Tue, 1 Jul 2014 12:26:49 +0100 Subject: [PATCH 6/7] Hopefully fix saving to backend --- easy_thumbnails/optimize/post_processor.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index a7e96d9b..05e813bf 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -66,8 +66,12 @@ def optimize_thumbnail(thumbnail): else: logger.info('{0} returned nothing'.format(optimize_command)) with open(temp_file.name, 'rb') as f: - thumbnail.file.open() - thumbnail.file.write(f.read()) - thumbnail.flush() + try: + storage.delete(thumbnail.path) + storage.save(thumbnail.path, thumbnail) + except NotImplementedError: + # Alternative object-based storage backends use name + storage.delete(thumbnail.name) + storage.save(thumbnail.name, thumbnail) except Exception as e: logger.error(e) From 15bd44905a847bee9f27df2da87374be600823b3 Mon Sep 17 00:00:00 2001 From: Damian Moore Date: Thu, 3 Jul 2014 16:14:30 +0100 Subject: [PATCH 7/7] Added back missing line --- easy_thumbnails/optimize/post_processor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/easy_thumbnails/optimize/post_processor.py b/easy_thumbnails/optimize/post_processor.py index 05e813bf..3555f97f 100644 --- a/easy_thumbnails/optimize/post_processor.py +++ b/easy_thumbnails/optimize/post_processor.py @@ -66,6 +66,7 @@ def optimize_thumbnail(thumbnail): else: logger.info('{0} returned nothing'.format(optimize_command)) with open(temp_file.name, 'rb') as f: + thumbnail.file = ContentFile(f.read()) try: storage.delete(thumbnail.path) storage.save(thumbnail.path, thumbnail)