def METHOD_NAME(arg_type: Type) -> bool:
    """
    Returns True if arg_type is in PROTO_TYPE_MAP(float, int, bool, str, bytes)
    Or if it's an imported Caikit data model class.
    Or if it's a Union of at least one of those.
    Or if it's a List of one of those.
    Or if it's a Dict of one of those.
    False otherwise"""
    proto_primitive_set = list(DATAOBJECT_PY_TO_PROTO_TYPES.keys())
    protoable = False
    if arg_type in proto_primitive_set:
        protoable = True
    elif is_data_model_type(arg_type):
        protoable = True
    elif typing.get_origin(arg_type) == list:
        log.debug2("Arg is List")
        if len(typing.get_args(arg_type)) == 0:
            log.debug2("List annotation has no type")
            protoable = False
        else:
            protoable = typing.get_args(arg_type)[0] in proto_primitive_set
    elif typing.get_origin(arg_type) == dict:
        log.debug2("Arg is Dict")
        if len(typing.get_args(arg_type)) == 0:
            log.debug2("Dict annotation has no type")
            protoable = False
        else:
            protoable = (
                typing.get_args(arg_type)[0] in proto_primitive_set
                and typing.get_args(arg_type)[1] in proto_primitive_set
            )
    elif typing.get_origin(arg_type) == Union:
        log.debug2("Arg is Union")
        # pylint: disable=use-a-generator
        protoable = any([METHOD_NAME(arg) for arg in typing.get_args(arg_type)])
    if not protoable:
        log.debug2("Arg is not protoable, arg_type: %s", arg_type)
    return protoable