def schema_dict_fields_generator(schema_dict): if "properties" in schema_dict and isinstance(schema_dict["properties"], dict): for property_name, value in schema_dict["properties"].items(): if "oneOf" in value: property_schema_dicts = value["oneOf"] else: property_schema_dicts = [value] for property_schema_dict in property_schema_dicts: if not isinstance(property_schema_dict, dict): continue property_type_set = get_property_type_set(property_schema_dict) if "object" in property_type_set: for field in schema_dict_fields_generator( property_schema_dict): yield "/" + property_name + field elif "array" in property_type_set: fields = schema_dict_fields_generator( property_schema_dict.get("items", {})) for field in fields: yield "/" + property_name + field yield "/" + property_name if "items" in schema_dict and isinstance(schema_dict["items"], dict): if "oneOf" in schema_dict["items"] and isinstance( schema_dict["items"]["oneOf"], list): for oneOf in schema_dict["items"]["oneOf"]: for field in schema_dict_fields_generator(oneOf): yield field
def schema_dict_fields_generator(schema_dict): if 'properties' in schema_dict: for property_name, value in schema_dict['properties'].items(): if 'oneOf' in value: property_schema_dicts = value['oneOf'] else: property_schema_dicts = [value] for property_schema_dict in property_schema_dicts: property_type_set = get_property_type_set(property_schema_dict) if 'object' in property_type_set: for field in schema_dict_fields_generator(property_schema_dict): yield '/' + property_name + field elif 'array' in property_type_set: fields = schema_dict_fields_generator(property_schema_dict['items']) for field in fields: yield '/' + property_name + field yield '/' + property_name
def schema_dict_fields_generator(schema_dict): if 'properties' in schema_dict and isinstance(schema_dict['properties'], dict): for property_name, value in schema_dict['properties'].items(): if 'oneOf' in value: property_schema_dicts = value['oneOf'] else: property_schema_dicts = [value] for property_schema_dict in property_schema_dicts: if not isinstance(property_schema_dict, dict): continue property_type_set = get_property_type_set(property_schema_dict) if 'object' in property_type_set: for field in schema_dict_fields_generator(property_schema_dict): yield '/' + property_name + field elif 'array' in property_type_set: fields = schema_dict_fields_generator(property_schema_dict.get('items', {})) for field in fields: yield '/' + property_name + field yield '/' + property_name
def test_get_property_type_set(): assert get_property_type_set({'type': 'a'}) == set(['a']) assert get_property_type_set({'type': ['a']}) == set(['a']) assert get_property_type_set({'type': ['a', 'b']}) == set(['a', 'b'])