From 999606613fe6ae9fcae45b8db0b7fd7884aed7b3 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Thu, 11 Dec 2014 17:33:26 +0100 Subject: [PATCH 1/5] handled case whrn we can't get image sizes --- sc/social/like/utils.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sc/social/like/utils.py b/sc/social/like/utils.py index ee0898a3..ed315ca4 100644 --- a/sc/social/like/utils.py +++ b/sc/social/like/utils.py @@ -45,6 +45,10 @@ def get_content_image(context, sizes = view.getImageSize(field) except AttributeError: sizes = img = None + if sizes == (0, 0) or sizes == ('', ''): + #this avoid strange cases where we can't get size infos. + #for example if the loaded image in a news is a bmp or a tiff + return None if sizes: kwargs = {} if not (width or height): From 4be932e524058ab17e37a42764f5921b63b16c52 Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Thu, 11 Dec 2014 17:33:40 +0100 Subject: [PATCH 2/5] fix tests --- sc/social/like/testing.py | 4 +- sc/social/like/tests/test_plugin_facebook.py | 41 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/sc/social/like/testing.py b/sc/social/like/testing.py index ac852559..783a4971 100644 --- a/sc/social/like/testing.py +++ b/sc/social/like/testing.py @@ -9,7 +9,7 @@ import random -def generate_image(width, height): +def generate_image(width, height, format="PNG"): # Mandelbrot fractal # FB - 201003254 # drawing area @@ -37,7 +37,7 @@ def generate_image(width, height): image.putpixel((x, y), b * 65536 + g * 256 + r) output = StringIO() - image.save(output, format="PNG") + image.save(output, format=format) return output.getvalue() diff --git a/sc/social/like/tests/test_plugin_facebook.py b/sc/social/like/tests/test_plugin_facebook.py index 11fb888a..eec9214d 100644 --- a/sc/social/like/tests/test_plugin_facebook.py +++ b/sc/social/like/tests/test_plugin_facebook.py @@ -73,12 +73,18 @@ def setUp(self): def setup_content(self, portal): portal.invokeFactory('Document', 'my-document') portal.invokeFactory('News Item', 'my-newsitem') + portal.invokeFactory('News Item', 'my-newsitem-bmp') portal.invokeFactory('Image', 'my-image') + portal.invokeFactory('Image', 'my-image-bmp') self.document = portal['my-document'] self.newsitem = portal['my-newsitem'] self.newsitem.setImage(generate_image(1024, 768)) + self.newsitem_bmp = portal['my-newsitem-bmp'] + self.newsitem_bmp.setImage(generate_image(1024, 768, format="BMP")) self.image = portal['my-image'] self.image.setImage(generate_image(1024, 768)) + self.image_bmp = portal['my-image-bmp'] + self.image_bmp.setImage(generate_image(1024, 768, format="BMP")) def test_config_view(self): plugin = self.plugin @@ -163,6 +169,28 @@ def test_plugin_view_image(self): self.assertEqual(view.image_width(), 1200) self.assertEqual(view.image_height(), 675) + def test_plugin_view_image_bmp(self): + plugin = self.plugin + image = self.image_bmp + + plugin_view = plugin.view() + view = image.restrictedTraverse(plugin_view) + + # At image, use local image + image_url = view.image_url() + self.assertTrue('logo.png' not in image_url) + self.assertEqual(view.image_width(), 1024) + self.assertEqual(view.image_height(), 768) + + # Set a larger image + image.setImage(generate_image(1920, 1080)) + + plugin_view = plugin.view() + view = image.restrictedTraverse(plugin_view) + + self.assertEqual(view.image_width(), 1200) + self.assertEqual(view.image_height(), 675) + def test_plugin_view_image_large(self): plugin = self.plugin image = self.image @@ -191,6 +219,19 @@ def test_plugin_view_newsitem(self): self.assertEqual(view.image_width(), 1024) self.assertEqual(view.image_height(), 768) + def test_plugin_view_newsitem_bmp(self): + plugin = self.plugin + newsitem = self.newsitem_bmp + + plugin_view = plugin.view() + view = newsitem.restrictedTraverse(plugin_view) + # At newsitem, use image + self.assertEqual(view.image, None) + image_url = view.image_url() + self.assertTrue('logo.png' in image_url) + self.assertEqual(view.image_width(), None) + self.assertEqual(view.image_height(), None) + def test_plugin_view_newsitem_large(self): plugin = self.plugin newsitem = self.newsitem From e93162f86e9adcc6d8edfe5256bdb182253f754f Mon Sep 17 00:00:00 2001 From: Andrea Cecchi Date: Thu, 11 Dec 2014 17:33:53 +0100 Subject: [PATCH 3/5] updated CHANGES --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index b93a33a8..d792dcaf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -12,6 +12,10 @@ Changelog - Add exception handling also for TypeError in get_content_image method [cekk] +- Fixed a problem with images loaded in news. If the image isn't a jpg, + the `get_content_image` method can't get image size and returns nothing. + This avoid some strange things, like MemoryError with Pillow. + [cekk] 2.0rc1 (2014-10-14) ^^^^^^^^^^^^^^^^^^ From 5ac1d14ed8049fe50d2226c72321765db49c5b7e Mon Sep 17 00:00:00 2001 From: hvelarde Date: Fri, 26 Dec 2014 11:11:21 -0200 Subject: [PATCH 4/5] Flake8 --- sc/social/like/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc/social/like/utils.py b/sc/social/like/utils.py index ed315ca4..3e2e48a8 100644 --- a/sc/social/like/utils.py +++ b/sc/social/like/utils.py @@ -46,8 +46,8 @@ def get_content_image(context, except AttributeError: sizes = img = None if sizes == (0, 0) or sizes == ('', ''): - #this avoid strange cases where we can't get size infos. - #for example if the loaded image in a news is a bmp or a tiff + # this avoid strange cases where we can't get size infos. + # for example if the loaded image in a news is a bmp or a tiff return None if sizes: kwargs = {} From a8cfeec378cdbe61e1c69a4328caf7b26628cd8b Mon Sep 17 00:00:00 2001 From: hvelarde Date: Fri, 26 Dec 2014 11:14:44 -0200 Subject: [PATCH 5/5] Fix typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ae3b0f0e..d3295893 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ matrix: - python: 2.6 env: PLONE_VERSION=4.1 install: - - sed -ie "s#test-4.3.x#test-$PLONE_VERSION.x.cfg#" buildout.cfg + - sed -ie "s#test-4.3.x#test-$PLONE_VERSION.x#" buildout.cfg - mkdir -p buildout-cache/downloads - python bootstrap.py -c travis.cfg -v 2.2.1 - bin/buildout -c travis.cfg annotate