def cancel_listener(self, filter_): for l_id, listener_filter in self._listeners.items(): if ((IViewFactory.providedBy(listener_filter) and filter_ is listener_filter) or (isinstance(listener_filter, (list, tuple)) and (filter_ in listener_filter))): self._cancel_listener(l_id)
def listen_changes(self, filter_, callback, kwargs=dict()): assert callable(callback), ("Callback should be callable, got %r" % (callback), ) l_id = str(uuid.uuid1()) if isinstance(filter_, (list, tuple, )): doc_ids = list(filter_) filter_i = self._filters['doc_ids'] filter_i.add_listener(callback, l_id, doc_ids) self.log("Registering listener for doc_ids: %r, callback %r", doc_ids, callback) elif IViewFactory.providedBy(filter_): filter_i = ViewFilter(filter_, kwargs) if filter_i.name in self._filters: filter_i = self._filters[filter_i.name] self._filters[filter_i.name] = filter_i filter_i.add_listener(callback, l_id) else: raise AttributeError("Not suported filter. You should pass a list" " of document ids or a IViewFactory object " "passed: %r" % (filter_)) d = self._setup_notifier(filter_i) d.addCallback(defer.override_result, l_id) return d
def get_changes(self, filter_=None, limit=None, since=0): if IViewFactory.providedBy(filter_): filter_ = ViewFilter(filter_, params=dict()) elif filter_ is not None: raise ValueError("%r should provide IViewFacory" % (filter_, )) return self._database.get_changes(filter_, limit, since)