def get_sub_args()

in src/aaz_dev/command/model/configuration/_arg_builder.py [0:0]


    def get_sub_args(self):
        assert isinstance(self.schema, (CMDObjectSchemaBase, CMDObjectSchemaDiscriminator))
        sub_args = []
        discriminator_mapping = {}
        if self._ref_arg:
            if isinstance(self._ref_arg, CMDClsArgBase):
                # use the linked instance
                unwrapped_ref_arg = self._ref_arg.get_unwrapped()
                assert unwrapped_ref_arg is not None
                sub_ref_args = unwrapped_ref_arg.args
            # sometime this will happen for example convert from string arg or any type arg to object arg
            elif hasattr(self._ref_arg, 'args'):
                sub_ref_args = self._ref_arg.args
            else:
                sub_ref_args = self._sub_ref_args
        else:
            sub_ref_args = self._sub_ref_args

        if self.schema.discriminators:
            # update self._flatten_discriminators, if any discriminator need flatten, then all discriminator needs to flatten
            for disc in self.schema.discriminators:
                sub_builder = self.get_sub_builder(schema=disc, ref_args=sub_ref_args)
                self._flatten_discriminators = self._flatten_discriminators or sub_builder._need_flatten()
            for disc in self.schema.discriminators:
                sub_builder = self.get_sub_builder(schema=disc, ref_args=sub_ref_args)
                results = sub_builder.get_args()
                sub_args.extend(results)
                if results and not self._flatten_discriminators:
                    assert len(results) == 1
                    if disc.property not in discriminator_mapping:
                        discriminator_mapping[disc.property] = {}
                    discriminator_mapping[disc.property][disc.value] = results[0].var

        if self.schema.props:
            removed = []  # remove useless schema
            for prop in self.schema.props:
                if hasattr(self.schema, "action") and self.schema.action in ['assign', 'remove'] and \
                        prop.name in ['type', 'userAssignedIdentities']:
                    removed.append(prop)
                    continue

                if prop.name in discriminator_mapping:
                    # If discriminators are not flattened then prop value can be associate with discriminator arguments
                    assert hasattr(prop, 'enum')
                    for item in prop.enum.items:
                        if item.value in discriminator_mapping[prop.name]:
                            item.arg = discriminator_mapping[prop.name][item.value]
                    continue
                sub_builder = self.get_sub_builder(schema=prop, ref_args=sub_ref_args)
                sub_args.extend(sub_builder.get_args())

            self.schema.props = [prop for prop in self.schema.props if prop not in removed]
            if isinstance(self.schema, CMDIdentityObjectSchema) and (not self._is_update_action or self.schema.action):
                self.add_identity_args(sub_args, sub_ref_args)

        if not sub_args:
            return None
        return sub_args