def render_arg_base()

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