comparison idavoll/memory_backend.py @ 37:9aa20efac203

Fix get_notification_list() to only return JIDs for subscriptions in the 'subscribed' state. Implement unsubscribe().
author Ralph Meijer <ralphm@ik.nu>
date Sun, 31 Oct 2004 15:59:40 +0000
parents ff7c73b253bf
children b9e7b3b6c687
comparison
equal deleted inserted replaced
36:23b1dca64d06 37:9aa20efac203
85 if items and not deliver_payloads: 85 if items and not deliver_payloads:
86 for item in items: 86 for item in items:
87 item.children = [] 87 item.children = []
88 88
89 self.dispatch({ 'items': items, 'node_id': node_id }, 89 self.dispatch({ 'items': items, 'node_id': node_id },
90 '//event/pubsub/notify') 90 '//event/pubsub/notify')
91 return defer.succeed(None) 91 return defer.succeed(None)
92 92
93 def get_notification_list(self, node_id, items): 93 def get_notification_list(self, node_id, items):
94 subscriptions = self.nodes[node_id].subscriptions
94 95
95 try: 96 try:
96 d = defer.succeed(self.nodes[node_id].subscriptions.keys()) 97 subscribers = [s for s in subscriptions
98 if subscriptions[s].state == 'subscribed']
99 d = defer.succeed(subscribers)
97 except: 100 except:
98 d = defer.fail() 101 d = defer.fail()
99 102
100 d.addCallback(self._magic_filter, node_id, items) 103 d.addCallback(self._magic_filter, node_id, items)
101 104
135 'affiliation': affiliation, 138 'affiliation': affiliation,
136 'node': node_id, 139 'node': node_id,
137 'jid': subscriber, 140 'jid': subscriber,
138 'subscription': subscription.state}) 141 'subscription': subscription.state})
139 142
143 def unsubscribe(self, node_id, subscriber, requestor):
144 try:
145 node = self.nodes[node_id]
146 except KeyError:
147 raise backend.NodeNotFound
148
149 if subscriber.userhostJID() != requestor:
150 raise backend.NotAuthorized
151
152 try:
153 del node.subscriptions[subscriber.full()]
154 except KeyError:
155 raise backend.NotSubscribed
156
157 return defer.succeed(None)
158
140 def store_items(self, node_id, items, publisher): 159 def store_items(self, node_id, items, publisher):
141 for item in items: 160 for item in items:
142 self.nodes[node_id].items[item["id"]] = item 161 self.nodes[node_id].items[item["id"]] = item
143 print self.nodes[node_id].items 162 print self.nodes[node_id].items
144 163
169 188
170 def subscribe(self, node_id, subscriber, requestor): 189 def subscribe(self, node_id, subscriber, requestor):
171 return self.parent.subscribe(node_id, subscriber, requestor) 190 return self.parent.subscribe(node_id, subscriber, requestor)
172 191
173 def unsubscribe(self, node_id, subscriber, requestor): 192 def unsubscribe(self, node_id, subscriber, requestor):
174 raise backend.NotImplemented 193 return self.parent.unsubscribe(node_id, subscriber, requestor)
175 194
176 class PersistenceService(service.Service): 195 class PersistenceService(service.Service):
177 196
178 __implements__ = backend.IPersistenceService, 197 __implements__ = backend.IPersistenceService,
179 198