42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import json
|
|
import datetime
|
|
|
|
from plone.dexterity import utils
|
|
import plone.dexterity.schema
|
|
from Products.Five import BrowserView
|
|
import plone.namedfile.field
|
|
|
|
import z3c.relationfield.relation
|
|
|
|
class GenericJson(BrowserView):
|
|
def __call__(self):
|
|
basename = self.context.portal_type
|
|
schemaName = utils.portalTypeToSchemaName(basename)
|
|
schema = getattr(plone.dexterity.schema.generated, schemaName)
|
|
d = {}
|
|
for attr in schema.names():
|
|
if not hasattr(self.context, attr):
|
|
continue
|
|
value = getattr(self.context, attr)
|
|
if isinstance(value, datetime.date):
|
|
value = value.strftime('%Y-%m-%d')
|
|
elif isinstance(value, datetime.datetime):
|
|
value = value.strftime('%Y-%m-%d %H:%M:%S')
|
|
elif isinstance(value, plone.namedfile.field.NamedBlobFile) or \
|
|
isinstance(value, plone.namedfile.field.NamedBlobImage) or \
|
|
isinstance(value, plone.namedfile.field.NamedFile) or \
|
|
isinstance(value, plone.namedfile.field.NamedImage):
|
|
# pass
|
|
continue
|
|
elif isinstance(value, z3c.relationfield.relation.RelationValue):
|
|
# XXX: add support for relations
|
|
continue
|
|
elif isinstance(value, list) and value:
|
|
if isinstance(value[0], z3c.relationfield.relation.RelationValue):
|
|
# XXX: add support for relations
|
|
continue
|
|
d[attr] = value
|
|
self.request.response.setHeader('Content-type', 'application/json')
|
|
return json.dumps(d)
|
|
|