@@ -127,6 +127,43 @@ def _get_field_type(field):
127
127
coreschema .Object : 'object' ,
128
128
}.get (field .schema .__class__ , 'string' )
129
129
130
+ def _get_schema_field_type (property ):
131
+ return {
132
+ coreschema .String : 'string' ,
133
+ coreschema .Integer : 'integer' ,
134
+ coreschema .Number : 'number' ,
135
+ coreschema .Boolean : 'boolean' ,
136
+ coreschema .Array : 'array' ,
137
+ coreschema .Object : 'object' ,
138
+ }.get (property .__class__ , 'string' )
139
+
140
+ def _get_nested_object_fields (field ):
141
+ try :
142
+ field_properties = field .schema .properties
143
+ except AttributeError :
144
+ field_properties = field .properties
145
+
146
+ properties = {}
147
+ for key , property in field_properties .items ():
148
+ field_description = _get_field_description (property )
149
+ field_type = _get_schema_field_type (property )
150
+ properties [key ] = {
151
+ 'type' : field_type ,
152
+ 'description' : field_description
153
+ }
154
+ if field_type == 'object' :
155
+ properties [key ]['properties' ] = _get_nested_object_fields (property )
156
+ if field_type == 'array' :
157
+ array_type = _get_schema_field_type (property .items )
158
+ array_properties = {
159
+ 'type' : array_type ,
160
+ }
161
+ if array_type == 'object' :
162
+ array_properties ['properties' ] = _get_nested_object_fields (property .items )
163
+ properties [key ]['items' ] = array_properties
164
+ return properties
165
+
166
+
130
167
131
168
def _get_parameters (link , encoding ):
132
169
"""
@@ -156,13 +193,20 @@ def _get_parameters(link, encoding):
156
193
else :
157
194
# Expand coreapi fields with location='form' into a single swagger
158
195
# parameter, with a schema containing multiple properties.
159
-
160
196
schema_property = {
161
197
'description' : field_description ,
162
198
'type' : field_type ,
163
199
}
200
+ if field_type == 'object' :
201
+ schema_property ['properties' ] = _get_nested_object_fields (field )
164
202
if field_type == 'array' :
165
- schema_property ['items' ] = {'type' : 'string' }
203
+ array_type = _get_schema_field_type (field .schema .items )
204
+ array_properties = {
205
+ 'type' : array_type ,
206
+ }
207
+ if array_type == 'object' :
208
+ array_properties ['properties' ] = _get_nested_object_fields (field .schema .items )
209
+ schema_property ['items' ] = array_properties
166
210
properties [field .name ] = schema_property
167
211
if field .required :
168
212
required .append (field .name )
0 commit comments