Mercurial > libervia-pubsub
diff idavoll/backend.py @ 61:ad08e021b4d5
Implement AffiliationsService.
author | Ralph Meijer <ralphm@ik.nu> |
---|---|
date | Sat, 06 Nov 2004 21:02:33 +0000 |
parents | 0fa161c00ed9 |
children | d617f8d19263 |
line wrap: on
line diff
--- a/idavoll/backend.py Sat Nov 06 21:01:29 2004 +0000 +++ b/idavoll/backend.py Sat Nov 06 21:02:33 2004 +0000 @@ -275,3 +275,40 @@ d = self.parent.storage.create_node(node_id, requestor) d.addCallback(lambda _: node_id) return d + +class AffiliationsService(service.Service): + + __implements__ = 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) + 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()