def unsubscribe(self, callback, resource, event): """Unsubscribe callback from the registry. :param callback: the callback. :param resource: the resource. :param event: the event. """ LOG.debug("Unsubscribe: %(callback)s %(resource)s %(event)s", { 'callback': callback, 'resource': resource, 'event': event }) callback_id = self._find(callback) if not callback_id: LOG.debug("Callback %s not found", callback_id) return if resource and event: del self._callbacks[resource][event][callback_id] self._index[callback_id][resource].discard(event) if not self._index[callback_id][resource]: del self._index[callback_id][resource] if not self._index[callback_id]: del self._index[callback_id] else: value = '%s,%s' % (resource, event) raise exceptions.Invalid(element='resource,event', value=value)
def publish(self, resource, event, trigger, payload=None): """Notify all subscribed callback(s) with a payload. Dispatch the resource's event to the subscribed callbacks. :param resource: The resource for the event. :param event: The event. :param trigger: The trigger. A reference to the sender of the event. :param payload: The optional event object to send to subscribers. If passed this must be an instance of BaseEvent. :raises Invalid, CallbackFailure: The Invalid exception is raised if the payload object is not an instance of BaseEvent. CallbackFailure is raise if the underlying callback has errors. """ if payload: if not isinstance(payload, events.EventPayload): raise exceptions.Invalid(element='event payload', value=type(payload)) return self.notify(resource, event, trigger, payload=payload)
def _validate_resource_type(resource_type): if not resources.is_valid_resource_type(resource_type): raise exceptions.Invalid(element='resource', value=resource_type)