38 lines
790 B
Python
38 lines
790 B
Python
|
from __future__ import absolute_import
|
||
|
from sleekxmpp.xmlstream.matcher.xpath import MatchXPath
|
||
|
|
||
|
class StanzaBase(object):
|
||
|
|
||
|
MATCHER = MatchXPath("")
|
||
|
|
||
|
def __init__(self, stream, xml=None, extensions=[]):
|
||
|
self.extensions = extensions
|
||
|
self.p = {} #plugins
|
||
|
|
||
|
self.xml = xml
|
||
|
self.stream = stream
|
||
|
if xml is not None:
|
||
|
self.fromXML(xml)
|
||
|
|
||
|
def fromXML(self, xml):
|
||
|
"Initialize based on incoming XML"
|
||
|
self._processXML(xml)
|
||
|
for ext in self.extensions:
|
||
|
ext.fromXML(self, xml)
|
||
|
|
||
|
|
||
|
def _processXML(self, xml, cur_ns=''):
|
||
|
if '}' in xml.tag:
|
||
|
ns,tag = xml.tag[1:].split('}')
|
||
|
else:
|
||
|
tag = xml.tag
|
||
|
|
||
|
def toXML(self, xml):
|
||
|
"Set outgoing XML"
|
||
|
|
||
|
def extend(self, extension_class, xml=None):
|
||
|
"Initialize extension"
|
||
|
|
||
|
def match(self, xml):
|
||
|
return self.MATCHER.match(xml)
|