Exemple #1
0
    def stopConnecting(self):
        """Stop attempting to connect."""
        if self.state != "connecting":
            raise error.NotConnectingError("we're not trying to connect")

        self.state = "disconnected"
        self.transport.failIfNotConnected(error.UserError())
        del self.transport
        def caller(self, *args, **kw):
            def execute(client):
                def store_tubes(res):
                    if cmd == "use":
                        self._msg("BeanstalkClient - store_tubes: USE %s" %
                                  args[0])
                        self.used_tube = args[0]
                    elif cmd == "watch":
                        self._msg("BeanstalkClient - store_tubes: WATCH %s" %
                                  args[0])
                        self.watched_tubes |= frozenset([args[0]])
                    elif cmd == "ignore":
                        self._msg("BeanstalkClient - store_tubes: IGNORE %s" %
                                  args[0])
                        self.watched_tubes -= frozenset([args[0]])

                    return res

                return getattr(client.protocol,
                               cmd)(*args, **kw).addCallback(store_tubes)

            def execute_on_connect(fail=None):
                if fail:
                    fail.trap('twisted.internet.error.ConnectionClosed')
                return self._waiter.push().addCallback(execute).addErrback(
                    execute_on_connect)

            if self.protocol:
                return execute(self).addErrback(execute_on_connect)
            elif self.factory.continueTrying:
                return execute_on_connect()
            else:
                return defer.fail(
                    error.NotConnectingError(
                        "Can't send command - not connected and not even trying"
                    ))