Skip to content

Commit

Permalink
Merge 8643f43 into 33ed72b
Browse files Browse the repository at this point in the history
  • Loading branch information
cekk committed Feb 3, 2015
2 parents 33ed72b + 8643f43 commit 1b08dc7
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 9 deletions.
4 changes: 4 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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)
^^^^^^^^^^^^^^^^^^
Expand Down
11 changes: 11 additions & 0 deletions sc/social/like/testing.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# -*- coding: utf-8 -*-

import os.path
from PIL import Image
from plone.app.testing import PloneSandboxLayer
from plone.app.testing import PLONE_FIXTURE
from plone.app.testing import IntegrationTesting
from plone.app.testing import FunctionalTesting

from StringIO import StringIO

import random
Expand Down Expand Up @@ -41,6 +44,14 @@ def generate_image(width, height):
return output.getvalue()


def load_image(width, height, format="PNG"):
filename = os.path.join(os.path.dirname(__file__),
'tests', 'images', "imgtest_%dx%d.%s" %
(width, height, format.lower()))
with open(filename, 'rb') as f:
return f.read()


class Fixture(PloneSandboxLayer):

defaultBases = (PLONE_FIXTURE,)
Expand Down
Binary file added sc/social/like/tests/images/imgtest_1024x768.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added sc/social/like/tests/images/imgtest_1920x1080.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added sc/social/like/tests/images/imgtest_640x480.bmp
Binary file not shown.
53 changes: 47 additions & 6 deletions sc/social/like/tests/test_plugin_facebook.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from sc.social.like.plugins.facebook.utils import facebook_language
from sc.social.like.plugins.facebook.utils import fix_iso
from sc.social.like.plugins.interfaces import IPlugin
from sc.social.like.testing import generate_image
from sc.social.like.testing import load_image
from sc.social.like.testing import INTEGRATION_TESTING
from zope.component import getUtilitiesFor
from zope.interface import alsoProvides
Expand Down Expand Up @@ -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.setImage(load_image(1024, 768))
self.newsitem_bmp = portal['my-newsitem-bmp']
self.newsitem_bmp.setImage(load_image(640, 480, format="BMP"))
self.image = portal['my-image']
self.image.setImage(generate_image(1024, 768))
self.image.setImage(load_image(1024, 768))
self.image_bmp = portal['my-image-bmp']
self.image_bmp.setImage(load_image(640, 480, format="BMP"))

def test_config_view(self):
plugin = self.plugin
Expand Down Expand Up @@ -155,7 +161,29 @@ def test_plugin_view_image(self):
self.assertEqual(view.image_type(), 'image/png')

# Set a larger image
image.setImage(generate_image(1920, 1080))
image.setImage(load_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_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(), 640)
self.assertEqual(view.image_height(), 480)

# Set a larger image
image.setImage(load_image(1920, 1080))

plugin_view = plugin.view()
view = image.restrictedTraverse(plugin_view)
Expand All @@ -166,7 +194,7 @@ def test_plugin_view_image(self):
def test_plugin_view_image_large(self):
plugin = self.plugin
image = self.image
image.setImage(generate_image(1920, 1080))
image.setImage(load_image(1920, 1080))

plugin_view = plugin.view()
view = image.restrictedTraverse(plugin_view)
Expand All @@ -191,10 +219,23 @@ 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
newsitem.setImage(generate_image(1920, 1080))
newsitem.setImage(load_image(1920, 1080))

plugin_view = plugin.view()
view = newsitem.restrictedTraverse(plugin_view)
Expand Down
6 changes: 3 additions & 3 deletions sc/social/like/tests/test_plugin_pinterest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from sc.social.like.plugins.pinterest import browser
from sc.social.like.plugins.interfaces import IPlugin
from sc.social.like.testing import INTEGRATION_TESTING
from sc.social.like.testing import generate_image
from sc.social.like.testing import load_image
from zope.component import getUtilitiesFor
from zope.interface import alsoProvides

Expand Down Expand Up @@ -70,9 +70,9 @@ def setup_content(self, portal):
portal.invokeFactory('News Item', 'my-newsitem')
portal.invokeFactory('Image', 'my-image')
self.newsitem = portal['my-newsitem']
self.newsitem.setImage(generate_image(1024, 768))
self.newsitem.setImage(load_image(1024, 768))
self.image = portal['my-image']
self.image.setImage(generate_image(1024, 768))
self.image.setImage(load_image(1024, 768))

def image_url(self, obj, field='image', scale='large'):

Expand Down
4 changes: 4 additions & 0 deletions sc/social/like/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit 1b08dc7

Please sign in to comment.