From a64aa9c6021cbb010dd77e3d0f8f2709d26cb4c6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Fri, 12 Mar 2010 14:29:54 +0000 Subject: [PATCH] * re-enable error handling in create_node results. * add subscribe_to_node method. * subscribe to all nodes created. --- omf/omf-slicemgr.py | 57 +++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/omf/omf-slicemgr.py b/omf/omf-slicemgr.py index 16053ff..6719e42 100644 --- a/omf/omf-slicemgr.py +++ b/omf/omf-slicemgr.py @@ -122,6 +122,7 @@ class PubSubClient(BaseClient): xs.addObserver("/iq/pubsub/create", self.result_create_node) xs.addObserver("/iq/pubsub/delete", self.result_delete_node) xs.addObserver("/iq/query[@xmlns='http://jabber.org/protocol/disco#items']", self.result_discover) + xs.addObserver("/iq/pubsub/subscription[@subscription='subscribed']", self.result_subscribe_to_node) def __iq(self, t="get"): iq = domish.Element((None, "iq")) @@ -131,6 +132,11 @@ class PubSubClient(BaseClient): iq.addUniqueId() return iq + def __add_pubsub(self, iq): + pubsub = iq.addElement("pubsub") + pubsub['xmlns'] = "http://jabber.org/protocol/pubsub" + return pubsub + def discover(self, node = None): iq = self.__iq("get") query = iq.addElement("query") @@ -154,10 +160,21 @@ class PubSubClient(BaseClient): self.requests.pop(iq['id']) + def subscribe_to_node(self, node): + iq = self.__iq("set") + pubsub = self.__add_pubsub(iq) + subscribe = pubsub.addElement("subscribe") + subscribe['node'] = node + subscribe['jid'] = self.id.full() + self.requests[iq['id']] = node + self.xmlstream.send(iq) + + def result_subscribe_to_node(self, iq): + self.requests.pop(iq['id']) + def create_node(self, node = None): iq = self.__iq("set") - pubsub = iq.addElement("pubsub") - pubsub['xmlns'] = "http://jabber.org/protocol/pubsub" + pubsub = self.__add_pubsub(iq) create = pubsub.addElement("create") if node: create['node'] = node @@ -166,27 +183,31 @@ class PubSubClient(BaseClient): self.xmlstream.send(iq) def result_create_node(self, iq): -# if hasattr(iq, "error"): -# node = self.requests[iq['id']] -# if hasattr(iq.error, "conflict"): -# # node is already there, nothing important. -# self.warn("NodeID exists: %s" % node) -# else: -# err_type = "" -# err_name = "" -# if iq.error: -# if iq.error.has_key('type'): -# err_type = iq.error['type'] -# if iq.error.firstChildElement and hasattr(iq.error.firstChildElement, "name"): -# err_name = iq.error.firstChildElement.name -# self.error("Can not create node: %s (error type: %s, %s)" % (node, err_type, err_name)) + node = self.requests[iq['id']] + try: + if hasattr(iq.error, "conflict"): + # node is already there, nothing important. + self.warn("NodeID exists: %s" % node) + else: + err_type = "" + err_name = "" + if iq.error: + if iq.error.has_key('type'): + err_type = iq.error['type'] + if iq.error.firstChildElement and hasattr(iq.error.firstChildElement, "name"): + err_name = iq.error.firstChildElement.name + self.error("Can not create node: %s (error type: %s, %s)" % (node, err_type, err_name)) + except AttributeError: + # no errors + # try subscribing to the node for debugging purposes + self.subscribe_to_node(node) + self.requests.pop(iq['id']) def delete_node(self, node): iq = self.__iq("set") - pubsub = iq.addElement("pubsub") - pubsub['xmlns'] = "http://jabber.org/protocol/pubsub#owner" + pubsub = self.__add_pubsub(iq) delete = pubsub.addElement("delete") delete['node'] = node self.requests[iq['id']] = node -- 2.45.2