@@ -78,38 +78,41 @@ def __init__(self, controlpanel):
7878 self .registry = getUtility (IRegistry )
7979
8080 def __call__ (self ):
81- json_schema = get_jsonschema_for_controlpanel (
82- self .controlpanel , self .controlpanel .context , self .controlpanel .request
83- )
84-
85- proxy = self .registry .forInterface (self .schema , prefix = self .schema_prefix )
86-
87- # Temporarily provide IDexterityContent, so we can use DX field
88- # serializers
89- alsoProvides (proxy , IDexterityContent )
90-
91- json_data = {}
92- for name , field in zope .schema .getFields (self .schema ).items ():
93- serializer = queryMultiAdapter (
94- (field , proxy , self .controlpanel .request ), IFieldSerializer
95- )
96- if serializer :
97- value = serializer ()
98- else :
99- value = getattr (proxy , name , None )
100- json_data [json_compatible (name )] = value
101-
102- noLongerProvides (proxy , IDexterityContent )
103-
104- # JSON schema
105- return {
81+ result = {
10682 "@id" : "{}/{}/{}" .format (
10783 self .controlpanel .context .absolute_url (),
10884 SERVICE_ID ,
10985 self .controlpanel .__name__ ,
11086 ),
11187 "title" : self .controlpanel .title ,
11288 "group" : self .controlpanel .group ,
113- "schema" : json_schema ,
114- "data" : json_data ,
11589 }
90+
91+ if self .schema is not None :
92+ json_schema = get_jsonschema_for_controlpanel (
93+ self .controlpanel , self .controlpanel .context , self .controlpanel .request
94+ )
95+ result ["schema" ] = json_schema
96+
97+ proxy = self .registry .forInterface (self .schema , prefix = self .schema_prefix )
98+
99+ # Temporarily provide IDexterityContent, so we can use DX field
100+ # serializers
101+ alsoProvides (proxy , IDexterityContent )
102+
103+ json_data = {}
104+ for name , field in zope .schema .getFields (self .schema ).items ():
105+ serializer = queryMultiAdapter (
106+ (field , proxy , self .controlpanel .request ), IFieldSerializer
107+ )
108+ if serializer :
109+ value = serializer ()
110+ else :
111+ value = getattr (proxy , name , None )
112+ json_data [json_compatible (name )] = value
113+
114+ noLongerProvides (proxy , IDexterityContent )
115+
116+ result ["data" ] = json_data
117+
118+ return result
0 commit comments