Mercurial > libervia-pubsub
diff idavoll/memory_storage.py @ 206:274a45d2a5ab
Implement root collection that includes all leaf nodes.
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Mon, 04 Aug 2008 13:47:10 +0000 |
parents | b4bf0a5ce50d |
children | aecfacb5a571 |
line wrap: on
line diff
--- a/idavoll/memory_storage.py Mon Aug 04 07:10:45 2008 +0000 +++ b/idavoll/memory_storage.py Mon Aug 04 13:47:10 2008 +0000 @@ -6,19 +6,30 @@ from twisted.internet import defer from twisted.words.protocols.jabber import jid -from idavoll import error, iidavoll +from wokkel.pubsub import Subscription -defaultConfig = {"pubsub#persist_items": True, - "pubsub#deliver_payloads": True, - "pubsub#send_last_published_item": 'on_sub', - "pubsub#node_type": "leaf"} +from idavoll import error, iidavoll class Storage: implements(iidavoll.IStorage) + defaultConfig = { + 'leaf': { + "pubsub#persist_items": True, + "pubsub#deliver_payloads": True, + "pubsub#send_last_published_item": 'on_sub', + }, + 'collection': { + "pubsub#deliver_payloads": True, + "pubsub#send_last_published_item": 'on_sub', + } + } + def __init__(self): - self._nodes = {} + rootNode = CollectionNode('', jid.JID('localhost'), + copy.copy(self.defaultConfig['collection'])) + self._nodes = {'': rootNode} def getNode(self, nodeIdentifier): @@ -34,15 +45,12 @@ return defer.succeed(self._nodes.keys()) - def createNode(self, nodeIdentifier, owner, config=None): + def createNode(self, nodeIdentifier, owner, config): if nodeIdentifier in self._nodes: return defer.fail(error.NodeExists()) - if not config: - config = copy.copy(defaultConfig) - if config['pubsub#node_type'] != 'leaf': - raise NotImplementedError + raise error.NoCollections() node = LeafNode(nodeIdentifier, owner, config) self._nodes[nodeIdentifier] = node @@ -72,12 +80,17 @@ for subscriber, subscription in node._subscriptions.iteritems(): subscriber = jid.internJID(subscriber) if subscriber.userhostJID() == entity.userhostJID(): - subscriptions.append((node.nodeIdentifier, subscriber, - subscription.state)) + subscriptions.append(subscription) return defer.succeed(subscriptions) + def getDefaultConfiguration(self, nodeType): + if nodeType == 'collection': + raise error.NoCollections() + + return self.defaultConfig[nodeType] + class Node: @@ -120,17 +133,25 @@ try: subscription = self._subscriptions[subscriber.full()] except KeyError: - state = None + return defer.succeed(None) else: - state = subscription.state - return defer.succeed(state) + return defer.succeed(subscription) - def addSubscription(self, subscriber, state): + def getSubscriptions(self, state=None): + return defer.succeed( + [subscription + for subscription in self._subscriptions.itervalues() + if state is None or subscription.state == state]) + + + + def addSubscription(self, subscriber, state, options): if self._subscriptions.get(subscriber.full()): return defer.fail(error.SubscriptionExists()) - subscription = Subscription(state) + subscription = Subscription(self.nodeIdentifier, subscriber, state, + options) self._subscriptions[subscriber.full()] = subscription return defer.succeed(None) @@ -144,14 +165,6 @@ return defer.succeed(None) - def getSubscribers(self): - subscribers = [jid.internJID(subscriber) for subscriber, subscription - in self._subscriptions.iteritems() - if subscription.state == 'subscribed'] - - return defer.succeed(subscribers) - - def isSubscribed(self, entity): for subscriber, subscription in self._subscriptions.iteritems(): if jid.internJID(subscriber).userhost() == entity.userhost() and \ @@ -187,11 +200,14 @@ -class LeafNodeMixin: +class LeafNode(Node): + + implements(iidavoll.ILeafNode) nodeType = 'leaf' - def __init__(self): + def __init__(self, nodeIdentifier, owner, config): + Node.__init__(self, nodeIdentifier, owner, config) self._items = {} self._itemlist = [] @@ -251,21 +267,8 @@ return defer.succeed(None) - -class LeafNode(Node, LeafNodeMixin): - - implements(iidavoll.ILeafNode) - - def __init__(self, nodeIdentifier, owner, config): - Node.__init__(self, nodeIdentifier, owner, config) - LeafNodeMixin.__init__(self) - - - -class Subscription: - - def __init__(self, state): - self.state = state +class CollectionNode(Node): + nodeType = 'collection'