in src/aaz_dev/command/controller/cfg_reader.py [0:0]
def _iter_sub_schema(cls, parent, schema_filter):
if isinstance(parent, CMDObjectSchemaBase):
if parent.props:
for prop in parent.props:
match, ret = schema_filter(parent, prop, [prop.name])
if match:
yield match
if ret:
return
# if isinstance(prop, (CMDObjectSchemaBase, CMDArraySchemaBase)):
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(prop, schema_filter):
if sub_schema:
sub_schema_idx = [prop.name, *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx
if parent.additional_props and parent.additional_props.item:
item = parent.additional_props.item
match, ret = schema_filter(parent, item, ['{}'])
if match:
yield match
if ret:
return
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(item, schema_filter):
if sub_schema:
sub_schema_idx = ['{}', *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx
if parent.discriminators:
for disc in parent.discriminators:
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(disc, schema_filter):
if sub_schema:
sub_schema_idx = [disc.get_safe_value(), *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx
elif isinstance(parent, CMDObjectSchemaDiscriminator):
if parent.props:
for prop in parent.props:
match, ret = schema_filter(parent, prop, [prop.name])
if match:
yield match
if ret:
return
# if isinstance(prop, (CMDObjectSchemaBase, CMDArraySchemaBase)):
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(prop, schema_filter):
if sub_schema:
sub_schema_idx = [prop.name, *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx
if parent.discriminators:
for disc in parent.discriminators:
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(disc, schema_filter):
if sub_schema:
sub_schema_idx = [disc.get_safe_value(), *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx
elif isinstance(parent, CMDArraySchemaBase):
item = parent.item
match, ret = schema_filter(parent, item, ['[]'])
if match:
yield match
if ret:
return
for sub_parent, sub_schema, sub_schema_idx in cls._iter_sub_schema(item, schema_filter):
if sub_schema:
sub_schema_idx = ['[]', *sub_schema_idx]
yield sub_parent, sub_schema, sub_schema_idx