@@ -117,6 +117,8 @@ def process_swagger(spec):
117117
118118 remove_model_prefixes (spec )
119119
120+ inline_primitive_models (spec )
121+
120122 # TODO: Kubernetes does not set a version for OpenAPI spec yet,
121123 # remove this when that is fixed.
122124 spec ['info' ]['version' ] = SPEC_VERSION
@@ -191,6 +193,40 @@ def remove_model_prefixes(spec):
191193 rename_model (spec , k , v ["new_name" ])
192194
193195
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+
194230def main ():
195231 pool = urllib3 .PoolManager ()
196232 with pool .request ('GET' , SPEC_URL , preload_content = False ) as response :
0 commit comments