def _get_timeout(value):
    """
    Turn an input str or int into a float timeout value.

    :param value: the input str or int
    :type value: str or int
    :raises ValueError:
    :returns: float
    """

    maximum_dbus_timeout_ms = 1073741823

    # Ensure the input str is not a float
    if isinstance(value, float):
        raise ValueError(
            "The timeout value provided is a float; it should be an integer."
        )

    try:
        timeout_int = int(value)
    except ValueError:
        raise ValueError("The timeout value provided is not an integer.")

    # Ensure the integer is not too large
    if timeout_int > maximum_dbus_timeout_ms:
        raise ValueError(
            "The timeout value provided exceeds the largest acceptable value, %s."
            % maximum_dbus_timeout_ms
        )

    # Convert from milliseconds to seconds
    return timeout_int / 1000