diff idavoll/generic_backend.py @ 153:753b8432460f

Work towards JEP-0060 1.8 - Remove subscription information from <affiliations/> result. - Add handling of <subscriptions/> entity use case. - Make <subscribe/> return <subscription/> instead of <entity/>. - Move <purge/> and <delete/> to owner namespace. - Don't use 'self' in interfaces.
author Ralph Meijer <ralphm@ik.nu>
date Sat, 06 May 2006 19:47:53 +0000
parents ea8b4189ae3b
children 5191ba7c4df8
line wrap: on
line diff
--- a/idavoll/generic_backend.py	Tue Dec 06 15:18:30 2005 +0000
+++ b/idavoll/generic_backend.py	Sat May 06 19:47:53 2006 +0000
@@ -162,17 +162,15 @@
         d = node.add_subscription(subscriber, 'subscribed')
         d.addCallback(lambda _: 'subscribed')
         d.addErrback(self._get_subscription, node, subscriber)
-        d.addCallback(self._return_subscription, affiliation, node.id)
+        d.addCallback(self._return_subscription, node.id)
         return d
 
     def _get_subscription(self, failure, node, subscriber):
         failure.trap(storage.SubscriptionExists)
         return node.get_subscription(subscriber)
 
-    def _return_subscription(self, result, affiliation, node_id):
-        return {'affiliation': affiliation,
-                'node': node_id,
-                'state': result}
+    def _return_subscription(self, result, node_id):
+        return node_id, result
 
     def unsubscribe(self, node_id, subscriber, requestor):
         if subscriber.userhostJID() != requestor:
@@ -182,6 +180,9 @@
         d.addCallback(lambda node: node.remove_subscription(subscriber))
         return d
 
+    def get_subscriptions(self, entity):
+        return self.parent.storage.get_subscriptions(entity)
+
 class NodeCreationService(service.Service):
 
     implements(backend.INodeCreationService)
@@ -246,37 +247,7 @@
     implements(backend.IAffiliationsService)
 
     def get_affiliations(self, entity):
-        d1 = self.parent.storage.get_affiliations(entity)
-        d2 = self.parent.storage.get_subscriptions(entity)
-        d = defer.DeferredList([d1, d2], fireOnOneErrback=1, consumeErrors=1)
-        d.addErrback(lambda x: x.value[0])
-        d.addCallback(self._affiliations_result, entity)
-        return d
-
-    def _affiliations_result(self, result, entity):
-        affiliations = result[0][1]
-        subscriptions = result[1][1]
-
-        new_affiliations = {}
-
-        for node, affiliation in affiliations:
-            new_affiliations[(node, entity.full())] = {'node': node,
-                                                'jid': entity,
-                                                'affiliation': affiliation,
-                                                'subscription': None
-                                               }
-
-        for node, subscriber, subscription in subscriptions:
-            key = node, subscriber.full()
-            if new_affiliations.has_key(key):
-                new_affiliations[key]['subscription'] = subscription
-            else:
-                new_affiliations[key] = {'node': node,
-                                         'jid': subscriber,
-                                         'affiliation': None,
-                                         'subscription': subscription}
-
-        return new_affiliations.values()
+        return self.parent.storage.get_affiliations(entity)
 
 class ItemRetrievalService(service.Service):