Commit 8df24490 authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

erp5_json_type: Add IJSONConvertable interface

parent bc94580f
...@@ -27,13 +27,22 @@ ...@@ -27,13 +27,22 @@
############################################################################## ##############################################################################
import json import json
import jsonschema import jsonschema
import zope.interface
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.XMLObject import XMLObject
from Products.ERP5Type import PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from erp5.component.interface.IJSONConvertable import IJSONConvertable
class JSONType(XMLObject): class JSONType(XMLObject):
""" """
Represents a portal type with JSON Schema Represents a portal type with JSON Schema
""" """
zope.interface.implements(
IJSONConvertable,
)
# Default Properties # Default Properties
property_sheets = ( PropertySheet.Base property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject , PropertySheet.XMLObject
...@@ -42,13 +51,17 @@ class JSONType(XMLObject): ...@@ -42,13 +51,17 @@ class JSONType(XMLObject):
, PropertySheet.TextDocument , PropertySheet.TextDocument
) )
def validateLocalJsonSchema(self, list_error=False): security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation, 'validateLocalJSONSchema')
def validateLocalJSONSchema(self, list_error=False):
""" """
Validate contained JSON with the Schema defined in the Portal Type. Validate contained JSON with the Schema defined in the Portal Type.
""" """
portal = self.getPortalObject() portal = self.getPortalObject()
defined_schema = json.loads(portal.portal_types[self.getPortalType()].getTextContent()) defined_schema = json.loads(portal.portal_types[self.getPortalType()].asJSONText())
text_content = self.getTextContent() text_content = self.asJSONText()
if text_content is None: if text_content is None:
return False return False
...@@ -62,5 +75,19 @@ class JSONType(XMLObject): ...@@ -62,5 +75,19 @@ class JSONType(XMLObject):
return err return err
return True return True
security.declareProtected(Permissions.AccessContentsInformation, 'validateJSONSchema')
def validateJSONSchema(self, list_error=False):
return self.validateLocalJSONSchema(list_error=list_error)
security.declareProtected(Permissions.AccessContentsInformation, 'validateJsonSchema')
def validateJsonSchema(self, list_error=False): def validateJsonSchema(self, list_error=False):
return self.validateLocalJsonSchema(list_error=list_error) # Deprecated, please use validateJSONSchema
\ No newline at end of file return self.validateJSONSchema(list_error=list_error)
security.declareProtected(Permissions.AccessContentsInformation, 'asJSONText')
def asJSONText(self):
return self.getTextContent()
security.declareProtected(Permissions.ModifyPortalContent, 'fromJSONText')
def fromJSONText(self, json_text):
return self.setTextContent(json_text)
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2021 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from zope.interface import Interface
class IJSONConvertable(Interface):
"""
JSON Convertable interface specification
Documents which implement the IJSONConvertable interface
can be converted to json.
"""
def asJSONText(**kw):
"""
Converts the current document to json
kw -- optional parameters which can be passed to the
conversion engine
"""
def fromJSONText(json_text):
"""
Update the current document from json
json_text -- json text to be used to update document
"""
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Interface Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>IJSONConvertable</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>interface.erp5.IJSONConvertable</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Interface Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
interface.erp5.IJSONConvertable
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment