Mercurial > libervia-backend
diff sat/plugins/plugin_misc_xmllog.py @ 2691:1ecceac3df96
plugin XEP-0198: Stream Management implementation:
- hooks can now be set in stream onElement and send methods
- xmllog refactored to use new hooks
- client.isConnected now uses transport.connected method
- fixed reconnection, SàT will now try to reconnect indefinitely until it success, unresolvable failure happen (e.g. invalid certificate), or explicit disconnection is requested (or a plugin change this behaviour)
- new triggers: "stream_hooks", "disconnecting", "disconnected", and "xml_init" (replace "XML Initialized")
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 18 Nov 2018 15:49:46 +0100 |
parents | 56f94936df1e |
children | ab2696e34d29 |
line wrap: on
line diff
--- a/sat/plugins/plugin_misc_xmllog.py Sat Nov 10 10:16:38 2018 +0100 +++ b/sat/plugins/plugin_misc_xmllog.py Sun Nov 18 15:49:46 2018 +0100 @@ -23,7 +23,7 @@ log = getLogger(__name__) from twisted.words.xish import domish -from twisted.words.xish import xmlstream +from functools import partial PLUGIN_INFO = { C.PI_NAME: "Raw XML log Plugin", @@ -36,26 +36,6 @@ C.PI_DESCRIPTION: _(u"""Send raw XML logs to bridge"""), } -host = None - - -def send(self, obj): - global host - if isinstance(obj, basestring): - log = unicode(obj) - elif isinstance(obj, domish.Element): - log = obj.toXml() - else: - log.error(_(u"INTERNAL ERROR: Unmanaged XML type")) - host.bridge.xmlLog("OUT", log, self._profile) - return self._original_send(obj) - - -def onElement(self, element): - global host - host.bridge.xmlLog("IN", element.toXml(), self._profile) - return self._original_onElement(element) - class XmlLog(object): @@ -71,30 +51,32 @@ "label_xmllog": _("Activate XML log") } - def __init__(self, host_): + def __init__(self, host): log.info(_("Plugin XML Log initialization")) - global host - host = host_ - - # parameters + self.host = host host.memory.updateParams(self.params) - - # bridge host.bridge.addSignal( "xmlLog", ".plugin", signature="sss" ) # args: direction("IN" or "OUT"), xml_data, profile - self.do_log = host.memory.getParamA("Xml log", "Debug") + host.trigger.add("stream_hooks", self.addHooks) + + def addHooks(self, client, receive_hooks, send_hooks): + self.do_log = self.host.memory.getParamA("Xml log", "Debug") if self.do_log: - XmlStream = xmlstream.XmlStream - XmlStream._original_send = XmlStream.send - XmlStream._original_onElement = XmlStream.onElement - XmlStream.send = send - XmlStream.onElement = onElement - XmlStream._profile = "" - host.trigger.add("XML Initialized", self.setProfile) + receive_hooks.append(partial(self.onReceive, client=client)) + send_hooks.append(partial(self.onSend, client=client)) log.info(_(u"XML log activated")) + return True - def setProfile(self, xmlstream, profile): - xmlstream._profile = profile - return True + def onReceive(self, element, client): + self.host.bridge.xmlLog("IN", element.toXml(), client.profile) + + def onSend(self, obj, client): + if isinstance(obj, basestring): + log = unicode(obj) + elif isinstance(obj, domish.Element): + log = obj.toXml() + else: + log.error(_(u"INTERNAL ERROR: Unmanaged XML type")) + self.host.bridge.xmlLog("OUT", log, client.profile)