diff --git a/doc/rtd/conf.py b/doc/rtd/conf.py index cfa1f63df63d..8efe5e53a11e 100644 --- a/doc/rtd/conf.py +++ b/doc/rtd/conf.py @@ -256,23 +256,28 @@ def render_property_template(prop_name, prop_cfg, prefix=""): def render_nested_properties(prop_cfg, defs, prefix): prop_str = "" + prop_types = set(["properties", "patternProperties"]) flatten_schema_refs(prop_cfg, defs) if "items" in prop_cfg: prop_str += render_nested_properties(prop_cfg["items"], defs, prefix) - if not set(["properties", "patternProperties"]).intersection(prop_cfg): - return prop_str - for prop_name, nested_cfg in prop_cfg.get("properties", {}).items(): - flatten_schema_all_of(nested_cfg) - flatten_schema_refs(nested_cfg, defs) - prop_str += render_property_template(prop_name, nested_cfg, prefix) - prop_str += render_nested_properties(nested_cfg, defs, prefix + " ") - for prop_name, nested_cfg in prop_cfg.get("patternProperties", {}).items(): - flatten_schema_all_of(nested_cfg) - flatten_schema_refs(nested_cfg, defs) - if nested_cfg.get("label"): - prop_name = nested_cfg.get("label") - prop_str += render_property_template(prop_name, nested_cfg, prefix) - prop_str += render_nested_properties(nested_cfg, defs, prefix + " ") + for alt_schema in prop_cfg["items"].get("oneOf", []): + if prop_types.intersection(alt_schema): + prop_str += render_nested_properties(alt_schema, defs, prefix) + + for hidden_key in prop_cfg.get("hidden", []): + prop_cfg.pop(hidden_key, None) + + # Render visible property types + for prop_type in prop_types.intersection(prop_cfg): + for prop_name, nested_cfg in prop_cfg.get(prop_type, {}).items(): + flatten_schema_all_of(nested_cfg) + flatten_schema_refs(nested_cfg, defs) + if nested_cfg.get("label"): + prop_name = nested_cfg.get("label") + prop_str += render_property_template(prop_name, nested_cfg, prefix) + prop_str += render_nested_properties( + nested_cfg, defs, prefix + " " + ) return prop_str