Skip to content

Commit

Permalink
Add NamedBlobFile support.
Browse files Browse the repository at this point in the history
  • Loading branch information
tisto committed Mar 29, 2015
1 parent 15e12f3 commit 9ebf074
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
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 NamedBlobFile
from plone.namedfile.file import NamedBlobImage
from plone.restapi.utils import append_json_to_links
from plone.restapi.utils import get_object_schema
Expand Down Expand Up @@ -118,6 +119,12 @@ def SerializeToJson(context):
context.absolute_url(),
value.filename
)
# File
elif isinstance(value, NamedBlobFile):
result[title] = '{0}/{1}'.format(
context.absolute_url(),
value.filename
)
else:
result[title] = str(value)
if getattr(context, 'request', False):
Expand Down
56 changes: 56 additions & 0 deletions src/plone/restapi/tests/test_adapter_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
import unittest2 as unittest

from plone.dexterity.interfaces import IDexterityContent
from plone.dexterity.fti import DexterityFTI
from plone.namedfile.field import NamedBlobFile as NamedBlobFileInterface
from plone.namedfile.file import NamedBlobFile

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 IFileDocument(IDexterityContent):

file = NamedBlobFileInterface(
title=u"Please upload a file",
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('FileDocument')
fti._updateProperty(
'schema',
'plone.restapi.tests.test_adapter_file.'
'IFileDocument'
)
types_tool = getToolByName(self.portal, "portal_types")
types_tool._setObject('FileDocument', fti)

def test_file_adapter(self):
self.portal.invokeFactory('FileDocument', 'filedoc1')
file_file = os.path.join(os.path.dirname(__file__), u'file.pdf')
self.portal.filedoc1.file = NamedBlobFile(
data=open(file_file, 'r').read(),
contentType='application/pdf',
filename=u'file.pdf'
)

self.assertEqual(
u'http://nohost/plone/filedoc1/file.pdf',
json.loads(ISerializeToJson(self.portal.filedoc1)).get('file')
)

0 comments on commit 9ebf074

Please sign in to comment.