summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/matcher
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-01-17 22:28:44 -0800
committerLance Stout <lancestout@gmail.com>2012-01-17 22:28:44 -0800
commit2923f5656150448e10f6f3a58a63470a987d47e1 (patch)
treeb2ece776f8aac3f6a2281668f972eb2fea17b141 /sleekxmpp/xmlstream/matcher
parent4274f49ada77d709b931f65e34d3a64e75b81638 (diff)
downloadslixmpp-2923f5656150448e10f6f3a58a63470a987d47e1.tar.gz
slixmpp-2923f5656150448e10f6f3a58a63470a987d47e1.tar.bz2
slixmpp-2923f5656150448e10f6f3a58a63470a987d47e1.tar.xz
slixmpp-2923f5656150448e10f6f3a58a63470a987d47e1.zip
Pre-parse StanzaPath paths to speed up matching.
The parsing and namespace cleaning isn't terribly expensive, but it does add up. It was adding an extra 5sec when processing 100,000 basic message stanzas.
Diffstat (limited to 'sleekxmpp/xmlstream/matcher')
-rw-r--r--sleekxmpp/xmlstream/matcher/stanzapath.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/sleekxmpp/xmlstream/matcher/stanzapath.py b/sleekxmpp/xmlstream/matcher/stanzapath.py
index 61c5332c..a4c0fda0 100644
--- a/sleekxmpp/xmlstream/matcher/stanzapath.py
+++ b/sleekxmpp/xmlstream/matcher/stanzapath.py
@@ -10,6 +10,7 @@
"""
from sleekxmpp.xmlstream.matcher.base import MatcherBase
+from sleekxmpp.xmlstream.stanzabase import fix_ns
class StanzaPath(MatcherBase):
@@ -18,8 +19,16 @@ class StanzaPath(MatcherBase):
The StanzaPath matcher selects stanzas that match a given "stanza path",
which is similar to a normal XPath except that it uses the interfaces and
plugins of the stanza instead of the actual, underlying XML.
+
+ :param criteria: Object to compare some aspect of a stanza against.
"""
+ def __init__(self, criteria):
+ self._criteria = fix_ns(criteria, split=True,
+ propagate_ns=False,
+ default_ns='jabber:client')
+ self._raw_criteria = criteria
+
def match(self, stanza):
"""
Compare a stanza against a "stanza path". A stanza path is similar to
@@ -31,4 +40,4 @@ class StanzaPath(MatcherBase):
:param stanza: The :class:`~sleekxmpp.xmlstream.stanzabase.ElementBase`
stanza to compare against.
"""
- return stanza.match(self._criteria)
+ return stanza.match(self._criteria) or stanza.match(self._raw_criteria)