diff options
Diffstat (limited to 'sleekxmpp/stanza')
-rw-r--r-- | sleekxmpp/stanza/iq.py | 20 | ||||
-rw-r--r-- | sleekxmpp/stanza/message.py | 21 | ||||
-rw-r--r-- | sleekxmpp/stanza/presence.py | 62 |
3 files changed, 68 insertions, 35 deletions
diff --git a/sleekxmpp/stanza/iq.py b/sleekxmpp/stanza/iq.py index eece37bd..68a429e0 100644 --- a/sleekxmpp/stanza/iq.py +++ b/sleekxmpp/stanza/iq.py @@ -1,5 +1,8 @@ from .. xmlstream.stanzabase import StanzaBase from xml.etree import cElementTree as ET +from . error import Error +from .. xmlstream.handler.waiter import Waiter +from .. xmlstream.matcher.id import MatcherId class Iq(StanzaBase): interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject')) @@ -11,7 +14,6 @@ class Iq(StanzaBase): StanzaBase.__init__(self, *args, **kwargs) if self['id'] == '': self['id'] = self.stream.getId() - print("________LOADED IQ CLASS") def result(self): self['type'] = 'result' @@ -37,3 +39,19 @@ class Iq(StanzaBase): def unhandled(self): pass # returned unhandled error + + def exception(self, traceback=None): + pass + + def send(self, block=True, timeout=10): + if block: + waitfor = Waiter('IqWait_%s' % self['id'], MatcherId(self['id'])) + self.stream.registerHandler(waitfor) + StanzaBase.send(self) + return waitfor.wait(timeout) + else: + return StanzaBase.send(self) + + +Iq.plugin_attrib_map['error'] = Error +Iq.plugin_tag_map["{%s}%s" % (Error.namespace, Error.name)] = Error diff --git a/sleekxmpp/stanza/message.py b/sleekxmpp/stanza/message.py index 3f9eb2ba..999f7924 100644 --- a/sleekxmpp/stanza/message.py +++ b/sleekxmpp/stanza/message.py @@ -1,5 +1,6 @@ from .. xmlstream.stanzabase import StanzaBase from xml.etree import cElementTree as ET +from . error import Error class Message(StanzaBase): interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject')) @@ -25,21 +26,5 @@ class Message(StanzaBase): self['body'] = body return self -if __name__ == '__main__': - m = Message() - m['to'] = 'me' - m['from'] = 'you' - m['type'] = 'chat' - m.reply() - m['body'] = 'Hello there!' - m['subject'] = 'whatever' - m['id'] = 'abc' - print(str(m)) - print(m['body']) - print(m['subject']) - print(m['id']) - m['type'] = None - m['body'] = None - m['id'] = None - print(str(m)) - print(m['type']) +Message.plugin_attrib_map['error'] = Error +Message.plugin_tag_map["{%s}%s" % (Error.namespace, Error.name)] = Error diff --git a/sleekxmpp/stanza/presence.py b/sleekxmpp/stanza/presence.py index 0733e9a9..f591211b 100644 --- a/sleekxmpp/stanza/presence.py +++ b/sleekxmpp/stanza/presence.py @@ -1,21 +1,51 @@ from .. xmlstream.stanzabase import StanzaBase -from .. xmlstream import xmlstream as xmlstreammod -from .. xmlstream.matcher.xpath import MatchXPath +from xml.etree import cElementTree as ET +from . error import Error -#_bases = [StanzaBase] + xmlstreammod.stanza_extensions.get('PresenceStanza', []) +class Presence(StanzaBase): + interfaces = set(('type', 'to', 'from', 'id', 'status', 'priority')) + types = set(('available', 'unavailable', 'error', 'probe', 'subscribe', 'subscribed', 'unsubscribe', 'unsubscribed')) + showtypes = set(('dnd', 'ffc', 'xa', 'away')) + sub_interfaces = set(('status', 'priority')) + name = 'presence' + namespace = 'jabber:client' -#class PresenceStanza(*_bases): -class PresenceStanza(StanzaBase): - - def __init__(self, stream, xml=None): - self.pfrom = '' - self.pto = '' - StanzaBase.__init__(self, stream, xml, xmlstreammod.stanza_extensions.get('PresenceStanza', [])) + def getShowElement(self): + return self.xml.find("{%s}show" % self.namespace) + + def setType(self, value): + if value in self.types: + show = self.getShowElement() + if value in self.types: + if show is not None: + self.xml.remove(show) + self._setAttr('type', value) + elif value in self.showtypes: + if show is None: + show = ET.Element("{%s}show" % self.namespace) + show.text = value + return self - def fromXML(self, xml): - StanzaBase.fromXML(self, xml) - self.pfrom = xml.get('from') - self.pto = xml.get('to') - self.ptype = xml.get('type') + def setPriority(self, value): + self._setSubText('priority', str(value)) + + def getPriority(self): + p = self._getSubText('priority') + if not p: p = 0 + return int(p) + + def getType(self): + out = self._getAttr('type') + if not out: + show = self.getShowElement() + if show is not None: + out = show.text + if not out or out is None: + out = 'available' + return out + + def delType(self): + self.setType('available') -stanzas = ({'stanza_class': PresenceStanza, 'matcher': MatchXPath('{jabber:client}presence'), 'root': True},) +Presence.plugin_attrib_map['error'] = Error +Presence.plugin_tag_map["{%s}%s" % (Error.namespace, Error.name)] = Error |