diff sat_pubsub/backend.py @ 317:34adc4a8aa64

new container module, with an ItemData container: this simplify item data manipulation and transmission between storage and backend, it's also better if new data need to be used.
author Goffi <goffi@goffi.org>
date Sun, 03 Jan 2016 18:33:22 +0100
parents 720d73e30bf7
children d13526c0eb32
line wrap: on
line diff
--- a/sat_pubsub/backend.py	Sun Jan 03 18:33:22 2016 +0100
+++ b/sat_pubsub/backend.py	Sun Jan 03 18:33:22 2016 +0100
@@ -72,18 +72,18 @@
 # from twisted.words.protocols.jabber.jid import JID, InvalidFormat
 from twisted.words.xish import utility
 
-from wokkel import disco, data_form, rsm
-from wokkel.iwokkel import IPubSubResource
-from wokkel.pubsub import PubSubResource, PubSubError, Subscription
+from wokkel import disco
+from wokkel import data_form
+from wokkel import rsm
+from wokkel import iwokkel
+from wokkel import pubsub
 
-from sat_pubsub import error, iidavoll, const
-from sat_pubsub.iidavoll import IBackendService, ILeafNode
+from sat_pubsub import error
+from sat_pubsub import iidavoll
+from sat_pubsub import const
+from sat_pubsub import container
 
 from copy import deepcopy
-from collections import namedtuple
-
-
-ItemData = namedtuple('ItemData', ('item', 'access_model', 'config', 'categories'))
 
 
 def _getAffiliation(node, entity):
@@ -336,7 +336,7 @@
                     check_overwrite = True
             access_model, item_config = self.parseItemConfig(item)
             categories = self.parseCategories(item)
-            items_data.append(ItemData(item, access_model, item_config, categories))
+            items_data.append(container.ItemData(item, access_model, item_config, categories))
 
         if persistItems:
             if check_overwrite and affiliation != 'owner':
@@ -594,11 +594,6 @@
         log.msg("Error while getting roster of {}: {}".format(unicode(owner_jid), failure.value))
         return {}
 
-    def _tuple2ItemData(self, items_data):
-        # FIXME: workaround for the use of ItemData which doesn't exist in storage
-        #        must be done in a cleaner way
-        return [ItemData(item, access_model, access_list, []) for item, access_model, access_list in items_data]
-
     def _doGetItems(self, result, requestor, maxItems, itemIdentifiers,
                     ext_data):
         node, affiliation = result
@@ -636,11 +631,9 @@
 
             if itemIdentifiers:
                 d = node.getItemsById(authorized_groups, unrestricted, itemIdentifiers)
-                d.addCallback(self._tuple2ItemData)
             else:
                 d = node.getItems(authorized_groups, unrestricted, maxItems, ext_data)
                 if unrestricted:
-                    d.addCallback(self._tuple2ItemData)
                     d.addCallback(append_item_config)
 
             try:
@@ -654,7 +647,7 @@
                                   rsm_data)
             return d
 
-        if not ILeafNode.providedBy(node):
+        if not iidavoll.ILeafNode.providedBy(node):
             return []
 
         if affiliation == 'outcast':
@@ -780,7 +773,6 @@
             d = node.getItemsPublishers(itemIdentifiers)
             d.addCallback(checkPublishers)
         d.addCallback(lambda dummy: node.getItemsById(None, True, itemIdentifiers))
-        d.addCallback(self._tuple2ItemData)
         d.addCallback(removeItems)
 
         if notify:
@@ -876,7 +868,7 @@
 
 
 
-class PubSubResourceFromBackend(PubSubResource):
+class PubSubResourceFromBackend(pubsub.PubSubResource):
     """
     Adapts a backend to an xmpp publish-subscribe service.
     """
@@ -932,7 +924,7 @@
     }
 
     def __init__(self, backend):
-        PubSubResource.__init__(self)
+        pubsub.PubSubResource.__init__(self)
 
         self.backend = backend
         self.hideNodes = False
@@ -993,7 +985,7 @@
                 return new_item
 
             notifications_filtered.append((owner_jid,
-                                           set([Subscription(node.nodeIdentifier,
+                                           set([pubsub.Subscription(node.nodeIdentifier,
                                                             owner_jid,
                                                             'subscribed')]),
                                            [getFullItem(item_data) for item_data in items_data]))
@@ -1025,7 +1017,7 @@
             #we add the owner
 
             notifications_filtered.append((owner_jid,
-                                           set([Subscription(node.nodeIdentifier,
+                                           set([pubsub.Subscription(node.nodeIdentifier,
                                                             owner_jid,
                                                             'subscribed')]),
                                            [item_data.item for item_data in items_data]))
@@ -1143,7 +1135,7 @@
         msg = failure.value.msg
 
         if pubsubCondition:
-            exc = PubSubError(condition, pubsubCondition, feature, msg)
+            exc = pubsub.PubSubError(condition, pubsubCondition, feature, msg)
         else:
             exc = StanzaError(condition, text=msg)
 
@@ -1326,5 +1318,5 @@
         return d.addErrback(self._mapErrors)
 
 components.registerAdapter(PubSubResourceFromBackend,
-                           IBackendService,
-                           IPubSubResource)
+                           iidavoll.IBackendService,
+                           iwokkel.IPubSubResource)