summaryrefslogtreecommitdiff
path: root/sleekxmpp/stanza/presence.py
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/stanza/presence.py')
-rw-r--r--sleekxmpp/stanza/presence.py62
1 files changed, 46 insertions, 16 deletions
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