Skip to content

Commit

Permalink
Add support for NamedBlobFile images.
Browse files Browse the repository at this point in the history
  • Loading branch information
tisto committed Mar 29, 2015
1 parent b27cd23 commit 15e12f3
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 10 deletions.
4 changes: 2 additions & 2 deletions docs/source/_json/collection.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"test_user_1_"
],
"description": "This is a collection with two documents",
"effective": "1969-12-31T00:00:00+01:00",
"effective": "1969-12-31T00:00:00+02:00",
"exclude_from_nav": "False",
"expires": "2499-12-31T00:00:00+01:00",
"expires": "2499-12-31T00:00:00+02:00",
"icon": "++resource++plone.dexterity.item.gif",
"isPrincipiaFolderish": "0",
"item_count": "30",
Expand Down
4 changes: 2 additions & 2 deletions docs/source/_json/document.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"test_user_1_"
],
"description": "Congratulations! You have successfully installed Plone.",
"effective": "1969-12-31T00:00:00+01:00",
"effective": "1969-12-31T00:00:00+02:00",
"exclude_from_nav": "False",
"expires": "2499-12-31T00:00:00+01:00",
"expires": "2499-12-31T00:00:00+02:00",
"icon": "++resource++plone.dexterity.item.gif",
"isPrincipiaFolderish": "0",
"language": "",
Expand Down
4 changes: 2 additions & 2 deletions docs/source/_json/folder.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"test_user_1_"
],
"description": "This is a folder with two documents",
"effective": "1969-12-31T00:00:00+01:00",
"effective": "1969-12-31T00:00:00+02:00",
"exclude_from_nav": "False",
"expires": "2499-12-31T00:00:00+01:00",
"expires": "2499-12-31T00:00:00+02:00",
"icon": "++resource++plone.dexterity.item.gif",
"isAnObjectManager": "1",
"isPrincipiaFolderish": "1",
Expand Down
4 changes: 2 additions & 2 deletions docs/source/_json/link.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"test_user_1_"
],
"description": "This is a link",
"effective": "1969-12-31T00:00:00+01:00",
"effective": "1969-12-31T00:00:00+02:00",
"exclude_from_nav": "False",
"expires": "2499-12-31T00:00:00+01:00",
"expires": "2499-12-31T00:00:00+02:00",
"icon": "++resource++plone.dexterity.item.gif",
"isPrincipiaFolderish": "0",
"language": "",
Expand Down
6 changes: 4 additions & 2 deletions docs/source/_json/newsitem.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
"test_user_1_"
],
"description": "This is a news item",
"effective": "1969-12-31T00:00:00+01:00",
"effective": "1969-12-31T00:00:00+02:00",
"exclude_from_nav": "False",
"expires": "2499-12-31T00:00:00+01:00",
"expires": "2499-12-31T00:00:00+02:00",
"icon": "++resource++plone.dexterity.item.gif",
"image": "http://localhost:55001/plone/newsitem/image.png",
"image_caption": "This is an image caption.",
"isPrincipiaFolderish": "0",
"language": "",
"meta_type": "Dexterity Item",
Expand Down
7 changes: 7 additions & 0 deletions src/plone/restapi/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from plone.app.contenttypes.interfaces import ICollection
from plone.app.contenttypes.interfaces import IFile
from plone.app.contenttypes.interfaces import IImage
from plone.namedfile.file import NamedBlobImage
from plone.restapi.utils import append_json_to_links
from plone.restapi.utils import get_object_schema
from plone.restapi.interfaces import ISerializeToJson
Expand Down Expand Up @@ -111,6 +112,12 @@ def SerializeToJson(context):
# Unicode
elif isinstance(value, unicode):
result[title] = value
# Image
elif isinstance(value, NamedBlobImage):
result[title] = '{0}/{1}'.format(
context.absolute_url(),
value.filename
)
else:
result[title] = str(value)
if getattr(context, 'request', False):
Expand Down
57 changes: 57 additions & 0 deletions src/plone/restapi/tests/test_adapter_image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
import unittest2 as unittest

from plone.dexterity.interfaces import IDexterityContent
from plone.dexterity.fti import DexterityFTI
from plone.namedfile.field import NamedBlobImage as NamedBlobImageInterface
from plone.namedfile.file import NamedBlobImage

from plone.restapi.testing import \
PLONE_RESTAPI_INTEGRATION_TESTING
from plone.restapi.interfaces import ISerializeToJson

from Products.CMFCore.utils import getToolByName

import json
import os


class IImageDocument(IDexterityContent):

image = NamedBlobImageInterface(
title=u"Please upload an image",
required=False,
)


class TestSerializeToJsonAdapter(unittest.TestCase):

layer = PLONE_RESTAPI_INTEGRATION_TESTING

def setUp(self):
self.app = self.layer['app']
self.portal = self.layer['portal']
self.portal_url = self.portal.absolute_url()
fti = DexterityFTI('ImageDocument')
fti._updateProperty(
'schema',
'plone.restapi.tests.test_adapter_image.'
'IImageDocument'
)
types_tool = getToolByName(self.portal, "portal_types")
types_tool._setObject('ImageDocument', fti)

def test_image_adapter(self):
self.portal.invokeFactory('ImageDocument', 'imagedoc1')
image_file = os.path.join(os.path.dirname(__file__), u'image.png')
self.portal.imagedoc1.image = NamedBlobImage(
data=open(image_file, 'r').read(),
contentType='image/png',
filename=u'image.png'
)
self.portal.imagedoc1.image_caption = u'This is an image caption.'

self.assertEqual(
u'http://nohost/plone/imagedoc1/image.png',
json.loads(ISerializeToJson(self.portal.imagedoc1)).get('image')
)
15 changes: 15 additions & 0 deletions src/plone/restapi/tests/test_browser_traversal.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ def test_document_traversal(self):

def test_news_item_traversal(self):
self.portal.invokeFactory('News Item', id='news1')
image_file = os.path.join(os.path.dirname(__file__), u'image.png')
self.portal.news1.image = NamedBlobImage(
data=open(image_file, 'r').read(),
contentType='image/png',
filename=u'image.png'
)
self.portal.news1.image_caption = u'This is an image caption.'
transaction.commit()
response = requests.get(
self.portal.news1.absolute_url(),
Expand All @@ -104,6 +111,14 @@ def test_news_item_traversal(self):
response.json()['@id'],
self.portal.news1.absolute_url()
)
self.assertEqual(
u'This is an image caption.',
response.json()['image_caption']
)
self.assertEqual(
u'http://localhost:55001/plone/news1/image.png',
response.json()['image']
)

def test_folder_traversal(self):
response = requests.get(
Expand Down
7 changes: 7 additions & 0 deletions src/plone/restapi/tests/test_documentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ def test_documentation_news_item(self):
'text/plain',
'text/html'
)
image_file = os.path.join(os.path.dirname(__file__), u'image.png')
self.portal.newsitem.image = NamedBlobImage(
data=open(image_file, 'r').read(),
contentType='image/png',
filename=u'image.png'
)
self.portal.newsitem.image_caption = u'This is an image caption.'
import transaction
transaction.commit()
response = requests.get(
Expand Down

0 comments on commit 15e12f3

Please sign in to comment.