Mercurial > libervia-pubsub
comparison idavoll/memory_storage.py @ 171:bc269696ef42
Reply with the correct error condition on subscription when not subscribed.
Author: ralphm.
Fixes #7.
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Thu, 03 Jan 2008 13:10:25 +0000 |
parents | ef22e4150caa |
children | 246911bcb699 |
comparison
equal
deleted
inserted
replaced
170:958e69630e52 | 171:bc269696ef42 |
---|---|
1 # Copyright (c) 2003-2007 Ralph Meijer | 1 # Copyright (c) 2003-2008 Ralph Meijer |
2 # See LICENSE for details. | 2 # See LICENSE for details. |
3 | 3 |
4 import copy | 4 import copy |
5 from zope.interface import implements | 5 from zope.interface import implements |
6 from twisted.internet import defer | 6 from twisted.internet import defer |
66 if subscriber.userhostJID() == entity.userhostJID(): | 66 if subscriber.userhostJID() == entity.userhostJID(): |
67 subscriptions.append((node.id, subscriber, | 67 subscriptions.append((node.id, subscriber, |
68 subscription.state)) | 68 subscription.state)) |
69 | 69 |
70 return defer.succeed(subscriptions) | 70 return defer.succeed(subscriptions) |
71 | 71 |
72 | |
72 class Node: | 73 class Node: |
73 | 74 |
74 implements(iidavoll.INode) | 75 implements(iidavoll.INode) |
75 | 76 |
76 def __init__(self, node_id, owner, config): | 77 def __init__(self, node_id, owner, config): |
82 def get_type(self): | 83 def get_type(self): |
83 return self.type | 84 return self.type |
84 | 85 |
85 def get_configuration(self): | 86 def get_configuration(self): |
86 return self._config | 87 return self._config |
87 | 88 |
88 def get_meta_data(self): | 89 def get_meta_data(self): |
89 config = copy.copy(self._config) | 90 config = copy.copy(self._config) |
90 config["pubsub#node_type"] = self.type | 91 config["pubsub#node_type"] = self.type |
91 return config | 92 return config |
92 | 93 |
94 for option in options: | 95 for option in options: |
95 if option in self._config: | 96 if option in self._config: |
96 self._config[option] = options[option] | 97 self._config[option] = options[option] |
97 | 98 |
98 return defer.succeed(None) | 99 return defer.succeed(None) |
99 | 100 |
100 def get_affiliation(self, entity): | 101 def get_affiliation(self, entity): |
101 return defer.succeed(self._affiliations.get(entity.full())) | 102 return defer.succeed(self._affiliations.get(entity.full())) |
102 | 103 |
103 def get_subscription(self, subscriber): | 104 def get_subscription(self, subscriber): |
104 try: | 105 try: |
119 | 120 |
120 def remove_subscription(self, subscriber): | 121 def remove_subscription(self, subscriber): |
121 try: | 122 try: |
122 del self._subscriptions[subscriber.full()] | 123 del self._subscriptions[subscriber.full()] |
123 except KeyError: | 124 except KeyError: |
124 return defer.fail(error.SubscriptionNotFound()) | 125 return defer.fail(error.NotSubscribed()) |
125 | 126 |
126 return defer.succeed(None) | 127 return defer.succeed(None) |
127 | 128 |
128 def get_subscribers(self): | 129 def get_subscribers(self): |
129 subscribers = [jid.internJID(subscriber) for subscriber, subscription | 130 subscribers = [jid.internJID(subscriber) for subscriber, subscription |
135 def is_subscribed(self, entity): | 136 def is_subscribed(self, entity): |
136 for subscriber, subscription in self._subscriptions.iteritems(): | 137 for subscriber, subscription in self._subscriptions.iteritems(): |
137 if jid.internJID(subscriber).userhost() == entity.userhost() and \ | 138 if jid.internJID(subscriber).userhost() == entity.userhost() and \ |
138 subscription.state == 'subscribed': | 139 subscription.state == 'subscribed': |
139 return defer.succeed(True) | 140 return defer.succeed(True) |
140 | 141 |
141 return defer.succeed(False) | 142 return defer.succeed(False) |
142 | 143 |
143 def get_affiliations(self): | 144 def get_affiliations(self): |
144 affiliations = [(jid.internJID(entity), affiliation) for entity, affiliation | 145 affiliations = [(jid.internJID(entity), affiliation) for entity, affiliation |
145 in self._affiliations.iteritems()] | 146 in self._affiliations.iteritems()] |
146 | 147 |
147 return defer.succeed(affiliations) | 148 return defer.succeed(affiliations) |
149 | |
148 | 150 |
149 class LeafNodeMixin: | 151 class LeafNodeMixin: |
150 | 152 |
151 type = 'leaf' | 153 type = 'leaf' |
152 | 154 |
178 pass | 180 pass |
179 else: | 181 else: |
180 self._itemlist.remove(item) | 182 self._itemlist.remove(item) |
181 del self._items[item_id] | 183 del self._items[item_id] |
182 deleted.append(item_id) | 184 deleted.append(item_id) |
183 | 185 |
184 return defer.succeed(deleted) | 186 return defer.succeed(deleted) |
185 | 187 |
186 def get_items(self, max_items=None): | 188 def get_items(self, max_items=None): |
187 if max_items: | 189 if max_items: |
188 list = self._itemlist[-max_items:] | 190 list = self._itemlist[-max_items:] |
189 else: | 191 else: |
190 list = self._itemlist | 192 list = self._itemlist |
191 return defer.succeed([item[0] for item in list]) | 193 return defer.succeed([item[0] for item in list]) |
192 | 194 |
193 def get_items_by_id(self, item_ids): | 195 def get_items_by_id(self, item_ids): |
194 items = [] | 196 items = [] |
195 for item_id in item_ids: | 197 for item_id in item_ids: |
196 try: | 198 try: |
197 item = self._items[item_id] | 199 item = self._items[item_id] |
205 self._items = {} | 207 self._items = {} |
206 self._itemlist = [] | 208 self._itemlist = [] |
207 | 209 |
208 return defer.succeed(None) | 210 return defer.succeed(None) |
209 | 211 |
212 | |
210 class LeafNode(Node, LeafNodeMixin): | 213 class LeafNode(Node, LeafNodeMixin): |
211 | 214 |
212 implements(iidavoll.ILeafNode) | 215 implements(iidavoll.ILeafNode) |
213 | 216 |
214 def __init__(self, node_id, owner, config): | 217 def __init__(self, node_id, owner, config): |
215 Node.__init__(self, node_id, owner, config) | 218 Node.__init__(self, node_id, owner, config) |
216 LeafNodeMixin.__init__(self) | 219 LeafNodeMixin.__init__(self) |
217 | 220 |
221 | |
218 class Subscription: | 222 class Subscription: |
219 | 223 |
220 def __init__(self, state): | 224 def __init__(self, state): |
221 self.state = state | 225 self.state = state |