From 116a33ba5162b2129dd787478f5ff2dd8f698b45 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 6 May 2015 13:03:47 +0200 Subject: Make syntax highlighting for XML lazy, to only call pygments when debug logs are enabled. Makes poezio about 11% faster when sending/receiving messages. --- slixmpp/xmlstream/tostring.py | 9 ++++++++- slixmpp/xmlstream/xmlstream.py | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/slixmpp/xmlstream/tostring.py b/slixmpp/xmlstream/tostring.py index 521ee460..041346cb 100644 --- a/slixmpp/xmlstream/tostring.py +++ b/slixmpp/xmlstream/tostring.py @@ -169,7 +169,14 @@ def _get_highlight(): LEXER = get_lexer_by_name('xml') FORMATTER = Terminal256Formatter() - return lambda x: highlight(x, LEXER, FORMATTER) + class Highlighter: + __slots__ = ['string'] + def __init__(self, string): + self.string = string + def __str__(self): + return highlight(str(self.string).strip(), LEXER, FORMATTER) + + return Highlighter except ImportError: return lambda x: x diff --git a/slixmpp/xmlstream/xmlstream.py b/slixmpp/xmlstream/xmlstream.py index 0cd6720a..71873e48 100644 --- a/slixmpp/xmlstream/xmlstream.py +++ b/slixmpp/xmlstream/xmlstream.py @@ -354,7 +354,7 @@ class XMLStream(asyncio.BaseProtocol): log.debug('RECV: %s', highlight(tostring(self.xml_root, xmlns=self.default_ns, stream=self, top_level=True, - open_only=True)).strip()) + open_only=True))) self.start_stream_handler(self.xml_root) self.xml_depth += 1 if event == 'end': @@ -845,7 +845,7 @@ class XMLStream(asyncio.BaseProtocol): :param string data: Any bytes or utf-8 string value. """ - log.debug("SEND: %s", highlight(data).strip()) + log.debug("SEND: %s", highlight(data)) if not self.transport: raise NotConnectedError() if isinstance(data, str): @@ -898,7 +898,7 @@ class XMLStream(asyncio.BaseProtocol): if stanza is None: return - log.debug("RECV: %s", highlight(str(stanza)).strip()) + log.debug("RECV: %s", highlight(stanza)) # Match the stanza against registered handlers. Handlers marked # to run "in stream" will be executed immediately; the rest will -- cgit v1.2.3