Remove unused portions of XMLMask

This commit is contained in:
Lance Stout 2013-01-20 16:24:50 -08:00
parent a1716de683
commit 93b8e66b5d

View File

@ -14,12 +14,6 @@ from sleekxmpp.xmlstream.stanzabase import ET
from sleekxmpp.xmlstream.matcher.base import MatcherBase from sleekxmpp.xmlstream.matcher.base import MatcherBase
# Flag indicating if the builtin XPath matcher should be used, which
# uses namespaces, or a custom matcher that ignores namespaces.
# Changing this will affect ALL XMLMask matchers.
IGNORE_NS = False
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -39,10 +33,6 @@ class MatchXMLMask(MatcherBase):
:class:`~sleekxmpp.xmlstream.matcher.stanzapath.StanzaPath` :class:`~sleekxmpp.xmlstream.matcher.stanzapath.StanzaPath`
should be used instead. should be used instead.
The use of namespaces in the mask comparison is controlled by
``IGNORE_NS``. Setting ``IGNORE_NS`` to ``True`` will disable namespace
based matching for ALL XMLMask matchers.
:param criteria: Either an :class:`~xml.etree.ElementTree.Element` XML :param criteria: Either an :class:`~xml.etree.ElementTree.Element` XML
object or XML string to use as a mask. object or XML string to use as a mask.
""" """
@ -84,8 +74,6 @@ class MatchXMLMask(MatcherBase):
do not have a specified namespace. do not have a specified namespace.
Defaults to ``"__no_ns__"``. Defaults to ``"__no_ns__"``.
""" """
use_ns = not IGNORE_NS
if source is None: if source is None:
# If the element was not found. May happend during recursive calls. # If the element was not found. May happend during recursive calls.
return False return False
@ -96,17 +84,10 @@ class MatchXMLMask(MatcherBase):
mask = ET.fromstring(mask) mask = ET.fromstring(mask)
except ExpatError: except ExpatError:
log.warning("Expat error: %s\nIn parsing: %s", '', mask) log.warning("Expat error: %s\nIn parsing: %s", '', mask)
if not use_ns:
# Compare the element without using namespaces. mask_ns_tag = "{%s}%s" % (self.default_ns, mask.tag)
source_tag = source.tag.split('}', 1)[-1] if source.tag not in [mask.tag, mask_ns_tag]:
mask_tag = mask.tag.split('}', 1)[-1] return False
if source_tag != mask_tag:
return False
else:
# Compare the element using namespaces
mask_ns_tag = "{%s}%s" % (self.default_ns, mask.tag)
if source.tag not in [mask.tag, mask_ns_tag]:
return False
# If the mask includes text, compare it. # If the mask includes text, compare it.
if mask.text and source.text and \ if mask.text and source.text and \
@ -122,37 +103,15 @@ class MatchXMLMask(MatcherBase):
# Recursively check subelements. # Recursively check subelements.
matched_elements = {} matched_elements = {}
for subelement in mask: for subelement in mask:
if use_ns: matched = False
matched = False for other in source.findall(subelement.tag):
for other in source.findall(subelement.tag): matched_elements[other] = False
matched_elements[other] = False if self._mask_cmp(other, subelement, use_ns):
if self._mask_cmp(other, subelement, use_ns): if not matched_elements.get(other, False):
if not matched_elements.get(other, False): matched_elements[other] = True
matched_elements[other] = True matched = True
matched = True if not matched:
if not matched: return False
return False
else:
if not self._mask_cmp(self._get_child(source, subelement.tag),
subelement, use_ns):
return False
# Everything matches. # Everything matches.
return True return True
def _get_child(self, xml, tag):
"""Return a child element given its tag, ignoring namespace values.
Returns ``None`` if the child was not found.
:param xml: The :class:`~xml.etree.ElementTree.Element` XML object
to search for the given child tag.
:param tag: The name of the subelement to find.
"""
tag = tag.split('}')[-1]
try:
children = [c.tag.split('}')[-1] for c in xml]
index = children.index(tag)
except ValueError:
return None
return list(xml)[index]