def find_sub_schema()

in src/aaz_dev/command/controller/cfg_reader.py [0:0]


    def find_sub_schema(cls, schema, idx):
        assert isinstance(idx, list) and len(idx) > 0

        if isinstance(schema, CMDObjectSchemaBase):
            current_idx = idx[0]
            remain_idx = idx[1:]
            if current_idx == '{}':
                if schema.additional_props and schema.additional_props.item:
                    item = schema.additional_props.item
                    if not remain_idx:
                        return item
                    return cls.find_sub_schema(item, remain_idx)
            elif schema.props:
                for prop in schema.props:
                    if current_idx == prop.name:
                        if not remain_idx:
                            return prop
                        return cls.find_sub_schema(prop, remain_idx)

            elif schema.discriminators:
                for disc in schema.discriminators:
                    if current_idx == disc.get_safe_value():
                        if not remain_idx:
                            return disc
                        return cls.find_sub_schema(disc, remain_idx)

        elif isinstance(schema, CMDObjectSchemaDiscriminator):
            current_idx = idx[0]
            remain_idx = idx[1:]
            if schema.props:
                for prop in schema.props:
                    if current_idx == prop.name:
                        if not remain_idx:
                            return prop
                        return cls.find_sub_schema(prop, remain_idx)

            elif schema.discriminators:
                for disc in schema.discriminators:
                    if current_idx == disc.get_safe_value():
                        if not remain_idx:
                            return disc
                        return cls.find_sub_schema(disc, remain_idx)

        elif isinstance(schema, CMDArraySchemaBase):
            current_idx = idx[0]
            remain_idx = idx[1:]
            if current_idx == '[]':
                item = schema.item
                if not remain_idx:
                    return item
                return cls.find_sub_schema(item, remain_idx)

        return None