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