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)
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))
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)
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))
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
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
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
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
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
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
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))
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)
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))
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)
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)
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))
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)
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)
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)