def _read_watch_event(self, buffer, offset): client = self.client watch, offset = Watch.deserialize(buffer, offset) path = watch.path if self.log_debug: log.debug('Received EVENT: %s', watch) watchers = [] if watch.type in (CREATED_EVENT, CHANGED_EVENT): watchers.extend(client._data_watchers.pop(path, [])) elif watch.type == DELETED_EVENT: watchers.extend(client._data_watchers.pop(path, [])) watchers.extend(client._child_watchers.pop(path, [])) elif watch.type == CHILD_EVENT: watchers.extend(client._child_watchers.pop(path, [])) else: log.warn('Received unknown event %r', watch.type) return # Strip the chroot if needed path = client.unchroot(path) ev = WatchedEvent(EVENT_TYPE_MAP[watch.type], client._state, path) # Last check to ignore watches if we've been stopped if client._stopped.is_set(): return # Dump the watchers to the watch thread for watch in watchers: client.handler.dispatch_callback(Callback('watch', watch, (ev, )))
def test_exception_in_queue(self): h = self._makeOne() h.start() ev = self._getEvent()() def func(): ev.set() raise ValueError('bang') call1 = Callback('completion', func, ()) h.dispatch_callback(call1) ev.wait()
def test_queue_empty_exception(self): from gevent.queue import Empty h = self._makeOne() h.start() ev = self._getEvent()() def func(): ev.set() raise Empty() call1 = Callback('completion', func, ()) h.dispatch_callback(call1) ev.wait()