# HG changeset patch # User Goffi # Date 1397139170 -7200 # Node ID 93359853e4bc063dcbcbe79e02147ae08adb7c22 # Parent b3076b5797f6f1fb0adabbace3c9bc78d14bab07 plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049 diff -r b3076b5797f6 -r 93359853e4bc src/plugins/plugin_xep_0048.py --- a/src/plugins/plugin_xep_0048.py Tue Apr 08 09:50:45 2014 +0200 +++ b/src/plugins/plugin_xep_0048.py Thu Apr 10 16:12:50 2014 +0200 @@ -25,6 +25,7 @@ from logging import debug, info, warning, error from twisted.words.xish import domish from twisted.words.protocols.jabber import jid +from twisted.words.protocols.jabber.error import StanzaError from twisted.internet import defer @@ -98,15 +99,13 @@ - 'pubsub': XEP-0223 storage @param profile: %(doc_profile)s @return: data dictionary, or None if feature is not available - - @raise: exception.FeatureNotFound """ client = self.host.getClient(profile) if storage_type == 'private': try: bookmarks_private_xml = yield self.private_plg.privateXMLGet('storage', NS_BOOKMARKS, profile) data = client.bookmarks_private = self._bookmarkElt2Dict(bookmarks_private_xml) - except (exceptions.FeatureNotFound, AttributeError): + except (StanzaError, AttributeError): info(_("Private XML storage not available")) data = client.bookmarks_private = None elif storage_type == 'pubsub': diff -r b3076b5797f6 -r 93359853e4bc src/plugins/plugin_xep_0049.py --- a/src/plugins/plugin_xep_0049.py Tue Apr 08 09:50:45 2014 +0200 +++ b/src/plugins/plugin_xep_0049.py Thu Apr 10 16:12:50 2014 +0200 @@ -19,7 +19,6 @@ from sat.core.i18n import _ from logging import debug, info, error, warning -from twisted.internet import defer from wokkel import compat from twisted.words.xish import domish @@ -44,7 +43,6 @@ info(_("Plugin XEP-0049 initialization")) self.host = host - @defer.inlineCallbacks def privateXMLStore(self, element, profile_key): """Store private data @param element: domish.Element to store (must have a namespace) @@ -53,13 +51,12 @@ """ assert isinstance(element, domish.Element) client = self.host.getClient(profile_key) - yield self.host.checkFeature(XEP_0049.NS_PRIVATE, profile_key=client.profile) + # XXX: feature announcement in disco#info is not mandatory in XEP-0049, so we have to try to use private XML, and react according to the answer iq_elt = compat.IQ(client.xmlstream) query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE) query_elt.addChild(element) - yield iq_elt.send() + return iq_elt.send() - @defer.inlineCallbacks def privateXMLGet(self, node_name, namespace, profile_key): """Store private data @param node_name: name of the node to get @@ -69,11 +66,14 @@ """ client = self.host.getClient(profile_key) - yield self.host.checkFeature(XEP_0049.NS_PRIVATE, profile_key=client.profile) + # XXX: see privateXMLStore note about feature checking iq_elt = compat.IQ(client.xmlstream, 'get') query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE) query_elt.addElement(node_name, namespace) - answer_iq_elt = yield iq_elt.send() - answer_query_elt = answer_iq_elt.elements(XEP_0049.NS_PRIVATE, 'query').next() - defer.returnValue(answer_query_elt.firstChildElement()) + def getCb(answer_iq_elt): + answer_query_elt = answer_iq_elt.elements(XEP_0049.NS_PRIVATE, 'query').next() + return answer_query_elt.firstChildElement() + d = iq_elt.send() + d.addCallback(getCb) + return d