Exemplo n.º 1
0
    def add_callback_threadsafe(self, callback):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractIOServices.add_callback_threadsafe()`.

        """
        check_callback_arg(callback, 'callback')
        self._reactor.callFromThread(callback)
Exemplo n.º 2
0
    def call_later(self, delay, callback):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractIOServices.call_later()`.

        """
        check_callback_arg(callback, 'callback')
        return _TimerHandle(self._reactor.callLater(delay, callback))
Exemplo n.º 3
0
    def _adapter_add_callback_threadsafe(self, callback):
        """Implement
        :py:meth:`pika.connection.Connection._adapter_add_callback_threadsafe()`.

        """
        check_callback_arg(callback, 'callback')
        self._reactor.callFromThread(callback)
Exemplo n.º 4
0
    def call_later(self, delay, callback):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractIOServices.call_later()`.

        """
        check_callback_arg(callback, 'callback')
        return _TimerHandle(self._reactor.callLater(delay, callback))
Exemplo n.º 5
0
    def __init__(self, native_loop, host, port, family, socktype, proto, flags,
                 on_done):
        """

        :param AbstractSelectorIOLoop native_loop:
        :param host: `see socket.getaddrinfo()`
        :param port: `see socket.getaddrinfo()`
        :param family: `see socket.getaddrinfo()`
        :param socktype: `see socket.getaddrinfo()`
        :param proto: `see socket.getaddrinfo()`
        :param flags: `see socket.getaddrinfo()`
        :param on_done: on_done(records|BaseException) callback for reporting
            result from the given I/O loop. The single arg will be either an
            exception object (check for `BaseException`) in case of failure or
            the result returned by `socket.getaddrinfo()`.
        """
        check_callback_arg(on_done, 'on_done')

        self._state = self.NOT_STARTED
        self._result = None
        self._loop = native_loop
        self._host = host
        self._port = port
        self._family = family
        self._socktype = socktype
        self._proto = proto
        self._flags = flags
        self._on_done = on_done

        self._mutex = threading.Lock()
        self._threading_timer = None
Exemplo n.º 6
0
    def __init__(self, native_loop, host, port, family, socktype, proto, flags,
                 on_done):
        """Initialize the `_GeventAddressResolver`.

        :param AbstractSelectorIOLoop native_loop:
        :param host: `see socket.getaddrinfo()`
        :param port: `see socket.getaddrinfo()`
        :param family: `see socket.getaddrinfo()`
        :param socktype: `see socket.getaddrinfo()`
        :param proto: `see socket.getaddrinfo()`
        :param flags: `see socket.getaddrinfo()`
        :param on_done: on_done(records|BaseException) callback for reporting
            result from the given I/O loop. The single arg will be either an
            exception object (check for `BaseException`) in case of failure or
            the result returned by `socket.getaddrinfo()`.
        """
        check_callback_arg(on_done, 'on_done')

        self._loop = native_loop
        self._on_done = on_done
        # Reference to the greenlet performing `getaddrinfo`.
        self._greenlet = None
        # getaddrinfo(..) args.
        self._ga_host = host
        self._ga_port = port
        self._ga_family = family
        self._ga_socktype = socktype
        self._ga_proto = proto
        self._ga_flags = flags
Exemplo n.º 7
0
    def set_reader(self, fd, on_readable):
        """Implement
        :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_reader()`.

        """
        LOGGER.debug('SelectorIOServicesAdapter.set_reader(%s, %r)', fd,
                     on_readable)

        check_fd_arg(fd)
        check_callback_arg(on_readable, 'on_readable')

        try:
            callbacks = self._watchers[fd]
        except KeyError:
            self._loop.add_handler(fd, self._on_reader_writer_fd_events,
                                   self._readable_mask)
            self._watchers[fd] = _FileDescriptorCallbacks(reader=on_readable)
            LOGGER.debug('set_reader(%s, _) added handler Rd', fd)
        else:
            if callbacks.reader is None:
                assert callbacks.writer is not None
                self._loop.update_handler(
                    fd, self._readable_mask | self._writable_mask)
                LOGGER.debug('set_reader(%s, _) updated handler RdWr', fd)
            else:
                LOGGER.debug('set_reader(%s, _) replacing reader', fd)

            callbacks.reader = on_readable
Exemplo n.º 8
0
    def set_writer(self, fd, on_writable):
        """Implement
        :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_writer()`.

        """
        LOGGER.debug('SelectorIOServicesAdapter.set_writer(%s, %r)', fd,
                     on_writable)

        check_fd_arg(fd)
        check_callback_arg(on_writable, 'on_writable')

        try:
            callbacks = self._watchers[fd]
        except KeyError:
            self._loop.add_handler(fd, self._on_reader_writer_fd_events,
                                   self._writable_mask)
            self._watchers[fd] = _FileDescriptorCallbacks(writer=on_writable)
            LOGGER.debug('set_writer(%s, _) added handler Wr', fd)
        else:
            if callbacks.writer is None:
                assert callbacks.reader is not None
                # NOTE: Set the writer func before setting the mask!
                # Otherwise a race condition can occur where ioloop tries to
                # call writer when it is still None.
                callbacks.writer = on_writable
                self._loop.update_handler(
                    fd, self._readable_mask | self._writable_mask)
                LOGGER.debug('set_writer(%s, _) updated handler RdWr', fd)
            else:
                LOGGER.debug('set_writer(%s, _) replacing writer', fd)
                callbacks.writer = on_writable
Exemplo n.º 9
0
    def set_writer(self, fd, on_writable):
        """Implement
        :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_writer()`.

        """
        LOGGER.debug('SelectorIOServicesAdapter.set_writer(%s, %r)', fd,
                     on_writable)

        check_fd_arg(fd)
        check_callback_arg(on_writable, 'on_writable')

        try:
            callbacks = self._watchers[fd]
        except KeyError:
            self._loop.add_handler(fd, self._on_reader_writer_fd_events,
                                   self._writable_mask)
            self._watchers[fd] = _FileDescriptorCallbacks(writer=on_writable)
            LOGGER.debug('set_writer(%s, _) added handler Wr', fd)
        else:
            if callbacks.writer is None:
                assert callbacks.reader is not None
                self._loop.update_handler(
                    fd, self._readable_mask | self._writable_mask)
                LOGGER.debug('set_writer(%s, _) updated handler RdWr', fd)
            else:
                LOGGER.debug('set_writer(%s, _) replacing writer', fd)

            callbacks.writer = on_writable
Exemplo n.º 10
0
    def __init__(self, native_loop, host, port, family, socktype, proto, flags,
                 on_done):
        """

        :param AbstractSelectorIOLoop native_loop:
        :param host: `see socket.getaddrinfo()`
        :param port: `see socket.getaddrinfo()`
        :param family: `see socket.getaddrinfo()`
        :param socktype: `see socket.getaddrinfo()`
        :param proto: `see socket.getaddrinfo()`
        :param flags: `see socket.getaddrinfo()`
        :param on_done: on_done(records|BaseException) callback for reporting
            result from the given I/O loop. The single arg will be either an
            exception object (check for `BaseException`) in case of failure or
            the result returned by `socket.getaddrinfo()`.
        """
        check_callback_arg(on_done, 'on_done')

        self._state = self.NOT_STARTED
        self._result = None
        self._loop = native_loop
        self._host = host
        self._port = port
        self._family = family
        self._socktype = socktype
        self._proto = proto
        self._flags = flags
        self._on_done = on_done

        self._mutex = threading.Lock()
        self._threading_timer = None
Exemplo n.º 11
0
    def _adapter_add_timeout(self, deadline, callback):
        """Implement
        :py:meth:`pika.connection.Connection._adapter_add_timeout()`.

        """
        check_callback_arg(callback, 'callback')
        return _TimerHandle(self._reactor.callLater(deadline, callback))
Exemplo n.º 12
0
    def _adapter_add_callback_threadsafe(self, callback):
        """Implement
        :py:meth:`pika.connection.Connection._adapter_add_callback_threadsafe()`.

        """
        check_callback_arg(callback, 'callback')
        self._reactor.callFromThread(callback)
Exemplo n.º 13
0
    def _adapter_add_timeout(self, deadline, callback):
        """Implement
        :py:meth:`pika.connection.Connection._adapter_add_timeout()`.

        """
        check_callback_arg(callback, 'callback')
        return _TimerHandle(self._reactor.callLater(deadline, callback))
Exemplo n.º 14
0
    def __init__(self, deferred, on_done):
        """
        :param defer.Deferred deferred:
        :param callable on_done: user callback that takes the completion result
            or exception (check for `BaseException`) as its only arg. It will
            not be called if the operation was cancelled.

        """
        check_callback_arg(on_done, 'on_done')

        self._deferred = deferred
        self._cancelling = False

        def on_done_adapter(result):
            """Handle completion callback from the deferred instance. On
            Failure, extract the original exception from the Twisted Failure
            exception to pass to the user's callback.

            """

            # NOTE: Twisted makes callback for cancelled deferred, but pika
            # doesn't want that
            if not self._cancelling:
                if isinstance(result, twisted.python.failure.Failure):
                    LOGGER.debug(
                        'Deferred operation completed with Failure: %r',
                        result)
                    # Extract the original exception
                    result = result.value
                on_done(result)

        deferred.addBoth(on_done_adapter)
Exemplo n.º 15
0
    def add_callback_threadsafe(self, callback):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractIOServices.add_callback_threadsafe()`.

        """
        check_callback_arg(callback, 'callback')
        self._reactor.callFromThread(callback)
Exemplo n.º 16
0
    def add_timeout(self, deadline, callback):
        """Implement pure virtual
        :py:ref:meth:`pika.connection.Connection.add_timeout()` method.

        """
        check_callback_arg(callback, 'callback')
        return _TimerHandle(self._reactor.callLater(deadline, callback))
Exemplo n.º 17
0
    def __init__(self, deferred, on_done):
        """
        :param defer.Deferred deferred:
        :param callable on_done: user callback that takes the completion result
            or exception (check for `BaseException`) as its only arg. It will
            not be called if the operation was cancelled.

        """
        check_callback_arg(on_done, 'on_done')

        self._deferred = deferred
        self._cancelling = False

        def on_done_adapter(result):
            """Handle completion callback from the deferred instance. On
            Failure, extract the original exception from the Twisted Failure
            exception to pass to the user's callback.

            """

            # NOTE: Twisted makes callback for cancelled deferred, but pika
            # doesn't want that
            if not self._cancelling:
                if isinstance(result, twisted.python.failure.Failure):
                    LOGGER.debug(
                        'Deferred operation completed with Failure: %r',
                        result)
                    # Extract the original exception
                    result = result.value
                on_done(result)

        deferred.addBoth(on_done_adapter)
Exemplo n.º 18
0
    def set_writer(self, fd, on_writable):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractFileDescriptorServices.set_writer()`.

        """
        LOGGER.debug('%s.set_writer(%s, %s)', self.__class__.__name__, fd,
                     on_writable)
        check_fd_arg(fd)
        check_callback_arg(on_writable, 'on_writable')
        try:
            descriptor = self._fd_watchers[fd]
        except KeyError:
            descriptor = self._SocketReadWriteDescriptor(
                fd, on_writable=on_writable)
            self._fd_watchers[fd] = descriptor
        else:
            descriptor.on_writable = on_writable

        self._reactor.addWriter(descriptor)
Exemplo n.º 19
0
    def set_writer(self, fd, on_writable):
        """Implement
        :py:meth:`.utils.nbio_interface.AbstractFileDescriptorServices.set_writer()`.

        """
        LOGGER.debug('%s.set_writer(%s, %s)',
                     self.__class__.__name__, fd, on_writable)
        check_fd_arg(fd)
        check_callback_arg(on_writable, 'on_writable')
        try:
            descriptor = self._fd_watchers[fd]
        except KeyError:
            descriptor = self._SocketReadWriteDescriptor(
                fd,
                on_writable=on_writable)
            self._fd_watchers[fd] = descriptor
        else:
            descriptor.on_writable = on_writable

        self._reactor.addWriter(descriptor)