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 __future__ import absolute_import
|
||||||
from . basexmpp import basexmpp
|
from . basexmpp import basexmpp
|
||||||
from xml.etree import cElementTree as ET
|
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 XMLStream
|
||||||
from . xmlstream.xmlstream import RestartStream
|
from . xmlstream.xmlstream import RestartStream
|
||||||
from . xmlstream.matcher.xmlmask import MatchXMLMask
|
from . xmlstream.matcher.xmlmask import MatchXMLMask
|
||||||
|
|
|
@ -2,6 +2,8 @@ from . import base
|
||||||
from xml.etree import cElementTree
|
from xml.etree import cElementTree
|
||||||
from xml.parsers.expat import ExpatError
|
from xml.parsers.expat import ExpatError
|
||||||
|
|
||||||
|
ignore_ns = False
|
||||||
|
|
||||||
class MatchXMLMask(base.MatcherBase):
|
class MatchXMLMask(base.MatcherBase):
|
||||||
|
|
||||||
def __init__(self, criteria):
|
def __init__(self, criteria):
|
||||||
|
@ -19,6 +21,7 @@ class MatchXMLMask(base.MatcherBase):
|
||||||
def maskcmp(self, source, maskobj, use_ns=False, default_ns='__no_ns__'):
|
def maskcmp(self, source, maskobj, use_ns=False, default_ns='__no_ns__'):
|
||||||
"""maskcmp(xmlobj, maskobj):
|
"""maskcmp(xmlobj, maskobj):
|
||||||
Compare etree xml object to etree xml object mask"""
|
Compare etree xml object to etree xml object mask"""
|
||||||
|
use_ns = not ignore_ns
|
||||||
#TODO require namespaces
|
#TODO require namespaces
|
||||||
if source == None: #if element not found (happens during recursive check below)
|
if source == None: #if element not found (happens during recursive check below)
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
from . import base
|
from . import base
|
||||||
from xml.etree import cElementTree
|
from xml.etree import cElementTree
|
||||||
|
|
||||||
|
ignore_ns = False
|
||||||
|
|
||||||
class MatchXPath(base.MatcherBase):
|
class MatchXPath(base.MatcherBase):
|
||||||
|
|
||||||
def match(self, xml):
|
def match(self, xml):
|
||||||
x = cElementTree.Element('x')
|
x = cElementTree.Element('x')
|
||||||
x.append(xml)
|
x.append(xml)
|
||||||
|
if not ignore_ns:
|
||||||
if x.find(self._criteria) is not None:
|
if x.find(self._criteria) is not None:
|
||||||
return True
|
return True
|
||||||
return False
|
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
|
||||||
|
|
Loading…
Reference in a new issue