# HG changeset patch # User Ralph Meijer # Date 1099238380 0 # Node ID 9aa20efac2030a8bd0d05912dd44635689da5b0c # Parent 23b1dca64d06db361c793063e20ec092558a8fa2 Fix get_notification_list() to only return JIDs for subscriptions in the 'subscribed' state. Implement unsubscribe(). diff -r 23b1dca64d06 -r 9aa20efac203 idavoll/memory_backend.py --- a/idavoll/memory_backend.py Sun Oct 31 15:57:47 2004 +0000 +++ b/idavoll/memory_backend.py Sun Oct 31 15:59:40 2004 +0000 @@ -87,13 +87,16 @@ item.children = [] self.dispatch({ 'items': items, 'node_id': node_id }, - '//event/pubsub/notify') + '//event/pubsub/notify') return defer.succeed(None) def get_notification_list(self, node_id, items): + subscriptions = self.nodes[node_id].subscriptions try: - d = defer.succeed(self.nodes[node_id].subscriptions.keys()) + subscribers = [s for s in subscriptions + if subscriptions[s].state == 'subscribed'] + d = defer.succeed(subscribers) except: d = defer.fail() @@ -137,6 +140,22 @@ 'jid': subscriber, 'subscription': subscription.state}) + def unsubscribe(self, node_id, subscriber, requestor): + try: + node = self.nodes[node_id] + except KeyError: + raise backend.NodeNotFound + + if subscriber.userhostJID() != requestor: + raise backend.NotAuthorized + + try: + del node.subscriptions[subscriber.full()] + except KeyError: + raise backend.NotSubscribed + + return defer.succeed(None) + def store_items(self, node_id, items, publisher): for item in items: self.nodes[node_id].items[item["id"]] = item @@ -171,7 +190,7 @@ return self.parent.subscribe(node_id, subscriber, requestor) def unsubscribe(self, node_id, subscriber, requestor): - raise backend.NotImplemented + return self.parent.unsubscribe(node_id, subscriber, requestor) class PersistenceService(service.Service):