diff idavoll/backend.py @ 183:c21b986cff30

Implement HTTP client to gateway and implement functional tests with it.
author Ralph Meijer <ralphm@ik.nu>
date Fri, 11 Apr 2008 14:41:16 +0000
parents 0d4474051eeb
children 00a6dbfbee42
line wrap: on
line diff
--- a/idavoll/backend.py	Fri Apr 11 13:48:12 2008 +0000
+++ b/idavoll/backend.py	Fri Apr 11 14:41:16 2008 +0000
@@ -9,9 +9,9 @@
 
 from twisted.application import service
 from twisted.python import components
-from twisted.internet import defer
+from twisted.internet import defer, reactor
 from twisted.words.protocols.jabber.error import StanzaError
-from twisted.words.xish import utility
+from twisted.words.xish import domish, utility
 
 from wokkel.iwokkel import IDisco, IPubSubService
 from wokkel.pubsub import PubSubService, PubSubError
@@ -182,14 +182,36 @@
         return node_id, result
 
     def _send_last_published(self, node, subscriber):
-        def notify_item(items):
-            if not items:
+        class StringParser(object):
+            def __init__(self):
+                self.elementStream = domish.elementStream()
+                self.elementStream.DocumentStartEvent = self.docStart
+                self.elementStream.ElementEvent = self.elem
+                self.elementStream.DocumentEndEvent = self.docEnd
+
+            def docStart(self, elem):
+                self.document = elem
+
+            def elem(self, elem):
+                self.document.addChild(elem)
+
+            def docEnd(self):
+                pass
+
+            def parse(self, string):
+                self.elementStream.parse(string)
+                return self.document
+
+        def notify_item(result):
+            if not result:
                 return
 
-            self.dispatch({'items': items,
-                           'node_id': node.id,
-                           'subscriber': subscriber},
-                          '//event/pubsub/notify')
+            items = [domish.SerializedXML(item) for item in result]
+
+            reactor.callLater(0, self.dispatch, {'items': items,
+                                                 'node_id': node.id,
+                                                 'subscriber': subscriber},
+                                                 '//event/pubsub/notify')
 
         config = node.get_configuration()
         if config.get("pubsub#send_last_published_item", 'never') != 'on_sub':