@@ -117,6 +117,8 @@ def process_swagger(spec):
117
117
118
118
remove_model_prefixes (spec )
119
119
120
+ inline_primitive_models (spec )
121
+
120
122
# TODO: Kubernetes does not set a version for OpenAPI spec yet,
121
123
# remove this when that is fixed.
122
124
spec ['info' ]['version' ] = SPEC_VERSION
@@ -191,6 +193,40 @@ def remove_model_prefixes(spec):
191
193
rename_model (spec , k , v ["new_name" ])
192
194
193
195
196
+ def find_replace_ref_recursive (root , ref_name , replace_map ):
197
+ if isinstance (root , list ):
198
+ for r in root :
199
+ find_replace_ref_recursive (r , ref_name , replace_map )
200
+ if isinstance (root , dict ):
201
+ if "$ref" in root :
202
+ if root ["$ref" ] == ref_name :
203
+ del root ["$ref" ]
204
+ for k , v in replace_map .iteritems ():
205
+ if k in root :
206
+ if k != "description" :
207
+ raise PreprocessingException (
208
+ "Cannot inline model %s because of "
209
+ "conflicting key %s." % (ref_name , k ))
210
+ continue
211
+ root [k ] = v
212
+ for k , v in root .iteritems ():
213
+ find_replace_ref_recursive (v , ref_name , replace_map )
214
+
215
+
216
+ def inline_primitive_models (spec ):
217
+ to_remove_models = []
218
+ for k , v in spec ['definitions' ].iteritems ():
219
+ if "properties" not in v :
220
+ print ("Making primitive mode `%s` inline ..." % k )
221
+ if "type" not in v :
222
+ v ["type" ] = "object"
223
+ find_replace_ref_recursive (spec , "#/definitions/" + k , v )
224
+ to_remove_models .append (k )
225
+
226
+ for k in to_remove_models :
227
+ del spec ['definitions' ][k ]
228
+
229
+
194
230
def main ():
195
231
pool = urllib3 .PoolManager ()
196
232
with pool .request ('GET' , SPEC_URL , preload_content = False ) as response :
0 commit comments