Skip to content

Commit fbdff46

Browse files
committed
Inline primitive models in preprocessing
1 parent 84bf6cc commit fbdff46

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

scripts/preprocess_spec.py

+36
Original file line numberDiff line numberDiff line change
@@ -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+
194230
def main():
195231
pool = urllib3.PoolManager()
196232
with pool.request('GET', SPEC_URL, preload_content=False) as response:

0 commit comments

Comments
 (0)