in src/aaz_dev/cli/controller/az_arg_group_generator.py [0:0]
def render_arg_base(arg, cmd_ctx, arg_kwargs=None):
if isinstance(arg, CMDClsArgBase):
cls_name = arg.type[1:]
arg = cmd_ctx.arg_clses[cls_name].arg
else:
cls_name = getattr(arg, 'cls', None)
cls_builder_name = parse_cls_builder_name(cls_name) if cls_name else None
if arg_kwargs is None:
arg_kwargs = {}
if arg.nullable:
arg_kwargs['nullable'] = True
if arg.blank:
arg_kwargs["blank"] = arg.blank.value
if isinstance(arg, CMDAnyTypeArgBase):
arg_type = "AAZAnyTypeArg"
elif isinstance(arg, CMDStringArgBase):
arg_type = "AAZStrArg"
enum_kwargs = parse_arg_enum(arg.enum)
if enum_kwargs:
arg_kwargs.update(enum_kwargs)
if arg.fmt and isinstance(arg.fmt, CMDStringFormat):
arg_kwargs['fmt'] = fmt = {
"cls": "AAZStrArgFormat",
"kwargs": {}
}
if arg.fmt.pattern is not None:
fmt['kwargs']["pattern"] = arg.fmt.pattern
if arg.fmt.max_length is not None:
fmt['kwargs']["max_length"] = arg.fmt.max_length
if arg.fmt.min_length is not None:
fmt['kwargs']["min_length"] = arg.fmt.min_length
if isinstance(arg, CMDSubscriptionIdArgBase):
arg_type = "AAZSubscriptionIdArg"
elif isinstance(arg, CMDResourceGroupNameArgBase):
arg_type = "AAZResourceGroupNameArg"
if 'options' in arg_kwargs and set(arg_kwargs['options']) == {'--resource-group', '-g'}:
# it's default value
del arg_kwargs['options']
if 'id_part' in arg_kwargs and arg_kwargs['id_part'] == 'resource_group':
# it's default value
del arg_kwargs['id_part']
elif isinstance(arg, CMDResourceIdArgBase):
arg_type = "AAZResourceIdArg"
if arg.fmt:
arg_kwargs['fmt'] = fmt = {
"cls": "AAZResourceIdArgFormat",
"kwargs": {}
}
if arg.fmt.template is not None:
fmt['kwargs']['template'] = cmd_ctx.render_arg_resource_id_template(arg.fmt.template)
elif isinstance(arg, CMDResourceLocationArgBase):
arg_type = "AAZResourceLocationArg"
if 'options' in arg_kwargs and set(arg_kwargs['options']) == {'--location', '-l'}:
# it's default value
del arg_kwargs['options']
if not arg.nullable and not arg.no_rg_default and cmd_ctx.rg_arg_var:
resource_group_arg, hide = cmd_ctx.get_argument(cmd_ctx.rg_arg_var)
if not hide:
resource_group_arg = resource_group_arg.replace('self.ctx.args.', '')
arg_kwargs['fmt'] = fmt = {
"cls": "AAZResourceLocationArgFormat",
"kwargs": {
"resource_group_arg": resource_group_arg
}
}
elif isinstance(arg, CMDByteArgBase):
raise NotImplementedError()
elif isinstance(arg, CMDBinaryArgBase):
raise NotImplementedError()
elif isinstance(arg, CMDDurationArgBase):
arg_type = "AAZDurationArg"
elif isinstance(arg, CMDDateArgBase):
arg_type = "AAZDateArg"
elif isinstance(arg, CMDDateTimeArgBase):
arg_type = "AAZDateTimeArg"
elif isinstance(arg, CMDTimeArgBase):
arg_type = "AAZTimeArg"
elif isinstance(arg, CMDUuidArgBase):
arg_type = "AAZUuidArg"
elif isinstance(arg, CMDPasswordArgBase):
arg_type = "AAZPasswordArg"
elif isinstance(arg, CMDIntegerArgBase):
arg_type = "AAZIntArg"
enum_kwargs = parse_arg_enum(arg.enum)
if enum_kwargs:
arg_kwargs.update(enum_kwargs)
if arg.fmt and isinstance(arg.fmt, CMDIntegerFormat):
arg_kwargs['fmt'] = fmt = {
"cls": "AAZIntArgFormat",
"kwargs": {}
}
if arg.fmt.multiple_of is not None:
fmt['kwargs']["multiple_of"] = arg.fmt.multiple_of
if arg.fmt.maximum is not None:
fmt['kwargs']["maximum"] = arg.fmt.maximum
if arg.fmt.minimum is not None:
fmt['kwargs']["minimum"] = arg.fmt.minimum
# TODO: add format for integer32 and integer64
# if isinstance(arg, CMDInteger32ArgBase):
# raise NotImplementedError()
# elif isinstance(arg, CMDInteger64ArgBase):
# raise NotImplementedError()
elif isinstance(arg, CMDBooleanArgBase):
arg_type = "AAZBoolArg"
if arg.reverse:
arg_kwargs['fmt'] = {
"cls": "AAZBoolArgFormat",
"kwargs": {
"reverse": arg.reverse,
}
}
elif isinstance(arg, CMDFloatArgBase):
arg_type = "AAZFloatArg"
enum_kwargs = parse_arg_enum(arg.enum)
if enum_kwargs:
arg_kwargs.update(enum_kwargs)
if arg.fmt and isinstance(arg.fmt, CMDFloatFormat):
arg_kwargs['fmt'] = fmt = {
"cls": "AAZFloatArgFormat",
"kwargs": {}
}
if arg.fmt.multiple_of is not None:
fmt['kwargs']["multiple_of"] = arg.fmt.multiple_of
if arg.fmt.maximum is not None:
fmt['kwargs']['maximum'] = arg.fmt.maximum
if arg.fmt.minimum is not None:
fmt['kwargs']['minimum'] = arg.fmt.minimum
if arg.fmt.exclusive_maximum is not None:
fmt['kwargs']['exclusive_maximum'] = arg.fmt.exclusive_maximum
if arg.fmt.exclusive_minimum is not None:
fmt['kwargs']['exclusive_minimum'] = arg.fmt.exclusive_minimum
# TODO: add format for float32 and float64
# if isinstance(arg, CMDFloat32ArgBase):
# raise NotImplementedError()
# elif isinstance(arg, CMDFloat64ArgBase):
# raise NotImplementedError()
elif isinstance(arg, CMDObjectArgBase):
if arg.additional_props:
if arg.additional_props.any_type is True:
arg_type = "AAZFreeFormDictArg"
arg_fmt_cls = "AAZFreeFormDictArgFormat"
elif arg.args and arg.additional_props:
# not support object with both args and additional_props, so we treat it as AAZFreeFormDictArg
arg_type = "AAZFreeFormDictArg"
arg_fmt_cls = "AAZFreeFormDictArgFormat"
else:
assert arg.additional_props.item is not None
arg_type = "AAZDictArg"
arg_fmt_cls = "AAZDictArgFormat"
if arg.fmt is not None:
assert isinstance(arg.fmt, CMDObjectFormat)
arg_kwargs['fmt'] = fmt = {
"cls": arg_fmt_cls,
"kwargs": {}
}
if arg.fmt.max_properties is not None:
fmt['kwargs']['max_properties'] = arg.fmt.max_properties
if arg.fmt.min_properties is not None:
fmt['kwargs']['min_properties'] = arg.fmt.min_properties
else:
arg_type = "AAZObjectArg"
if arg.additional_props:
raise NotImplementedError()
if arg.fmt is not None:
assert isinstance(arg.fmt, CMDObjectFormat)
arg_kwargs['fmt'] = fmt = {
"cls": "AAZObjectArgFormat",
"kwargs": {}
}
if arg.fmt.max_properties is not None:
fmt['kwargs']['max_properties'] = arg.fmt.max_properties
if arg.fmt.min_properties is not None:
fmt['kwargs']['min_properties'] = arg.fmt.min_properties
elif isinstance(arg, CMDArrayArgBase):
arg_type = "AAZListArg"
if arg.fmt is not None:
arg_kwargs['fmt'] = fmt = {
"cls": "AAZListArgFormat",
"kwargs": {}
}
assert isinstance(arg.fmt, CMDArrayFormat)
if arg.fmt.unique is not None:
fmt['kwargs']['unique'] = arg.fmt.unique
if arg.fmt.max_length is not None:
fmt['kwargs']['max_length'] = arg.fmt.max_length
if arg.fmt.min_length is not None:
fmt['kwargs']['min_length'] = arg.fmt.min_length
else:
raise NotImplementedError()
return arg_type, arg_kwargs, cls_builder_name