mirror of
https://github.com/correl/SleekXMPP.git
synced 2024-11-27 19:19:54 +00:00
components now ignore namespaces in matching completely for server compatibility
This commit is contained in:
parent
a1ece44368
commit
226f719597
3 changed files with 27 additions and 2 deletions
|
@ -22,6 +22,14 @@
|
|||
from __future__ import absolute_import
|
||||
from . basexmpp import basexmpp
|
||||
from xml.etree import cElementTree as ET
|
||||
|
||||
# some servers use different namespaces for components -- this is a hack, but is there for compatibility
|
||||
import xmlstream.matcher.xmlmask
|
||||
import xmlstream.matcher.xpath
|
||||
xmlstream.matcher.xmlmask.ignore_ns = True
|
||||
xmlstream.matcher.xpath.ignore_ns = True
|
||||
# ----------
|
||||
|
||||
from . xmlstream.xmlstream import XMLStream
|
||||
from . xmlstream.xmlstream import RestartStream
|
||||
from . xmlstream.matcher.xmlmask import MatchXMLMask
|
||||
|
|
|
@ -2,6 +2,8 @@ from . import base
|
|||
from xml.etree import cElementTree
|
||||
from xml.parsers.expat import ExpatError
|
||||
|
||||
ignore_ns = False
|
||||
|
||||
class MatchXMLMask(base.MatcherBase):
|
||||
|
||||
def __init__(self, criteria):
|
||||
|
@ -19,6 +21,7 @@ class MatchXMLMask(base.MatcherBase):
|
|||
def maskcmp(self, source, maskobj, use_ns=False, default_ns='__no_ns__'):
|
||||
"""maskcmp(xmlobj, maskobj):
|
||||
Compare etree xml object to etree xml object mask"""
|
||||
use_ns = not ignore_ns
|
||||
#TODO require namespaces
|
||||
if source == None: #if element not found (happens during recursive check below)
|
||||
return False
|
||||
|
|
|
@ -1,11 +1,25 @@
|
|||
from . import base
|
||||
from xml.etree import cElementTree
|
||||
|
||||
ignore_ns = False
|
||||
|
||||
class MatchXPath(base.MatcherBase):
|
||||
|
||||
def match(self, xml):
|
||||
x = cElementTree.Element('x')
|
||||
x.append(xml)
|
||||
if x.find(self._criteria) is not None:
|
||||
if not ignore_ns:
|
||||
if x.find(self._criteria) is not None:
|
||||
return True
|
||||
return False
|
||||
else:
|
||||
criteria = [c.split('}')[-1] for c in self._criteria.split('/')]
|
||||
xml = x
|
||||
for tag in criteria:
|
||||
children = [c.tag.split('}')[-1] for c in xml.getchildren()]
|
||||
try:
|
||||
idx = children.index(tag)
|
||||
except ValueError:
|
||||
return False
|
||||
xml = xml.getchildren()[idx]
|
||||
return True
|
||||
return False
|
||||
|
|
Loading…
Reference in a new issue