def __init__(self, destination, queue,<EOL>setup_runtime=None, need_runtime=None):
if isinstance(destination, string_types):<EOL><INDENT>self.destination = parse_ssh_destination(destination)<EOL><DEDENT>else:<EOL><INDENT>if '<STR_LIT>' not in destination:<EOL><INDENT>raise InvalidDestination("<STR_LIT>"<EOL>"<STR_LIT>")<EOL><DEDENT>self.destination = destination<EOL><DEDENT>if setup_runtime not in (None, '<STR_LIT:default>', '<STR_LIT>'):<EOL><INDENT>raise ValueError("<STR_LIT>" % setup_runtime)<EOL><DEDENT>self.setup_runtime = setup_runtime<EOL>if need_runtime is not None:<EOL><INDENT>self.need_runtime = set(need_runtime)<EOL><DEDENT>else:<EOL><INDENT>self.need_runtime = None<EOL><DEDENT>self.queue = PosixPath(queue)<EOL>self._queue = None<EOL>self._ssh = None<EOL>self._connect()<EOL>
Creates a queue object, that represents a job queue on a server.

        :param destination: The address of the server, used to SSH into it.
        :param queue: The pathname of the queue on the remote server. Something
        like "~/.tej" is usually adequate. This will contain both the job info
        and files, and the scripts used to manage it on the server side.
        :param setup_runtime: The name of the runtime to deploy on the server
        if the queue doesn't already exist. If None (default), it will
        auto-detect what is appropriate (currently, `pbs` if the ``qsub``
        command is available), and fallback on `default`. If `need_runtime` is
        set, this should be one of the accepted values.
        :param need_runtime: A list of runtime names that are acceptable. If
        the queue already exists on the server and this argument is not None,
        the installed runtime will be matched against it, and a failure will be
        reported if it is not one of the provided values.