in src/aaz_dev/command/controller/workspace_cfg_editor.py [0:0]
def flatten_arg(self, *cmd_names, arg_var, sub_args_options=None):
command = self.find_command(*cmd_names)
parent, arg, _ = self.find_arg_with_parent_by_var(*cmd_names, arg_var=arg_var)
if not arg:
raise exceptions.InvalidAPIUsage(
f"Argument not exist: {arg.var}")
assert parent is not None
need_unwrap = False
if isinstance(arg, CMDClsArg) and isinstance(arg.implement, CMDObjectArg):
if arg.implement.additional_props:
raise exceptions.InvalidAPIUsage(f"Cannot flatten argument with additional properties")
need_unwrap = True
elif isinstance(arg, CMDObjectArg):
if arg.additional_props:
raise exceptions.InvalidAPIUsage(f"Cannot flatten argument with additional properties")
if arg.cls:
need_unwrap = True
else:
raise exceptions.InvalidAPIUsage(f"Cannot flatten argument in type: '{type(arg)}'")
if need_unwrap:
# unwrap cls argument first
self.unwrap_cls_arg(*cmd_names, arg_var=arg_var)
command = self.find_command(*cmd_names)
parent, arg, _ = self.find_arg_with_parent_by_var(*cmd_names, arg_var=arg_var)
assert arg and parent
parent.args.remove(arg)
used_options = set()
if isinstance(parent, CMDArgGroup):
for group in command.arg_groups:
for a in group.args:
used_options.update(a.options)
else:
for a in parent.args:
used_options.update(a.options)
for sub_arg in arg.args:
if sub_args_options and sub_arg.var in sub_args_options:
sub_arg.options = sub_args_options[sub_arg.var]
# verify duplicated option
for option in sub_arg.options:
if option in used_options:
raise exceptions.VerificationError(
message=f"Argument option '{option}' duplicated.",
details={
"type": "Argument",
"options": sub_arg.options,
"var": sub_arg.var,
}
)
used_options.add(option)
sub_arg.group = to_camel_case(arg.options[0])
sub_arg.hide = sub_arg.hide or arg.hide # inherient the hide property from the parent arguments
parent.args.append(sub_arg)
# regenerate args and its relationship with schema
command.generate_args()
self.reformat()