Source code for slixmpp.plugins.xep_0085.stanza


# Slixmpp: The Slick XMPP Library
# Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
# This file is part of Slixmpp.
# See the file LICENSE for copying permissio
import slixmpp
from slixmpp.xmlstream import ElementBase, ET


[docs] class ChatState(ElementBase): """ Example chat state stanzas: :: <message> <active xmlns="http://jabber.org/protocol/chatstates" /> </message> <message> <paused xmlns="http://jabber.org/protocol/chatstates" /> </message> """ name = '' namespace = 'http://jabber.org/protocol/chatstates' plugin_attrib = 'chat_state' interfaces = {'chat_state'} sub_interfaces = interfaces is_extension = True states = {'active', 'composing', 'gone', 'inactive', 'paused'}
[docs] def setup(self, xml=None): self.xml = ET.Element('') return True
[docs] def get_chat_state(self): parent = self.parent() for state in self.states: state_xml = parent.xml.find('{%s}%s' % (self.namespace, state)) if state_xml is not None: self.xml = state_xml return state return ''
[docs] def set_chat_state(self, state): self.del_chat_state() parent = self.parent() if state in self.states: self.xml = ET.Element('{%s}%s' % (self.namespace, state)) parent.append(self.xml) elif state not in [None, '']: raise ValueError('Invalid chat state')
[docs] def del_chat_state(self): parent = self.parent() for state in self.states: state_xml = parent.xml.find('{%s}%s' % (self.namespace, state)) if state_xml is not None: self.xml = ET.Element('') parent.xml.remove(state_xml)
[docs] class Active(ChatState): name = 'active'
[docs] class Composing(ChatState): name = 'composing'
[docs] class Gone(ChatState): name = 'gone'
[docs] class Inactive(ChatState): name = 'inactive'
[docs] class Paused(ChatState): name = 'paused'