This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
themis.importexport/themis/importexport/views.py

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)