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