Remove unused portions of XMLMask
This commit is contained in:
parent
a1716de683
commit
93b8e66b5d
@ -14,12 +14,6 @@ from sleekxmpp.xmlstream.stanzabase import ET
|
||||
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__)
|
||||
|
||||
|
||||
@ -39,10 +33,6 @@ class MatchXMLMask(MatcherBase):
|
||||
:class:`~sleekxmpp.xmlstream.matcher.stanzapath.StanzaPath`
|
||||
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
|
||||
object or XML string to use as a mask.
|
||||
"""
|
||||
@ -84,8 +74,6 @@ class MatchXMLMask(MatcherBase):
|
||||
do not have a specified namespace.
|
||||
Defaults to ``"__no_ns__"``.
|
||||
"""
|
||||
use_ns = not IGNORE_NS
|
||||
|
||||
if source is None:
|
||||
# If the element was not found. May happend during recursive calls.
|
||||
return False
|
||||
@ -96,17 +84,10 @@ class MatchXMLMask(MatcherBase):
|
||||
mask = ET.fromstring(mask)
|
||||
except ExpatError:
|
||||
log.warning("Expat error: %s\nIn parsing: %s", '', mask)
|
||||
if not use_ns:
|
||||
# Compare the element without using namespaces.
|
||||
source_tag = source.tag.split('}', 1)[-1]
|
||||
mask_tag = mask.tag.split('}', 1)[-1]
|
||||
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
|
||||
|
||||
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 mask.text and source.text and \
|
||||
@ -122,37 +103,15 @@ class MatchXMLMask(MatcherBase):
|
||||
# Recursively check subelements.
|
||||
matched_elements = {}
|
||||
for subelement in mask:
|
||||
if use_ns:
|
||||
matched = False
|
||||
for other in source.findall(subelement.tag):
|
||||
matched_elements[other] = False
|
||||
if self._mask_cmp(other, subelement, use_ns):
|
||||
if not matched_elements.get(other, False):
|
||||
matched_elements[other] = True
|
||||
matched = True
|
||||
if not matched:
|
||||
return False
|
||||
else:
|
||||
if not self._mask_cmp(self._get_child(source, subelement.tag),
|
||||
subelement, use_ns):
|
||||
return False
|
||||
matched = False
|
||||
for other in source.findall(subelement.tag):
|
||||
matched_elements[other] = False
|
||||
if self._mask_cmp(other, subelement, use_ns):
|
||||
if not matched_elements.get(other, False):
|
||||
matched_elements[other] = True
|
||||
matched = True
|
||||
if not matched:
|
||||
return False
|
||||
|
||||
# Everything matches.
|
||||
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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user