Mercurial > libervia-pubsub
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 |