diff --git a/sat/core/xmpp.py b/sat/core/xmpp.py index dc0d8c47..4f2b447c 100644 --- a/sat/core/xmpp.py +++ b/sat/core/xmpp.py @@ -496,7 +496,7 @@ class SatXMPPEntity: @param type_(unicode): IQ type ('set' or 'get') @param timeout(None, int): timeout in seconds @return((D)domish.Element: result stanza - errback is called if and error stanza is returned + errback is called if an error stanza is returned """ iq_elt = xmlstream.IQ(self.xmlstream, type_) iq_elt.timeout = timeout @@ -511,7 +511,7 @@ class SatXMPPEntity: iq_error_elt = error.StanzaError(condition).toResponse(iq_elt) self.xmlstream.send(iq_error_elt) - def generateMessageXML(self, data): + def generateMessageXML(self, data, post_xml_treatments=None): """Generate stanza from message data @param data(dict): message data @@ -524,6 +524,8 @@ class SatXMPPEntity: - type - subject - extra + @param post_xml_treatments(Deferred): a Deferred which will be called with data + one XML is generated @return (dict) message data """ data["xml"] = message_elt = domish.Element((None, "message")) @@ -554,6 +556,9 @@ class SatXMPPEntity: thread_elt["parent"] = data["extra"]["thread_parent"] except KeyError: pass + + if post_xml_treatments is not None: + post_xml_treatments.callback(data) return data def addPostXmlCallbacks(self, post_xml_treatments): @@ -650,9 +655,9 @@ class SatXMPPEntity: log.debug(_("Sending message (type {type}, to {to})") .format(type=data["type"], to=to_jid.full())) - pre_xml_treatments.addCallback(lambda __: self.generateMessageXML(data)) - pre_xml_treatments.chainDeferred(post_xml_treatments) - post_xml_treatments.addCallback(self.sendMessageData) + pre_xml_treatments.addCallback(lambda __: self.generateMessageXML(data, post_xml_treatments)) + pre_xml_treatments.addCallback(lambda __: post_xml_treatments) + post_xml_treatments.addCallback(lambda __: self.sendMessageData(data)) if send_only: log.debug(_("Triggers, storage and echo have been inhibited by the " "'send_only' parameter"))