From 07018c0afa7485b06424bf6787d242e7ee523d34 Mon Sep 17 00:00:00 2001 From: Nathan Fritz Date: Thu, 17 Dec 2009 01:54:22 +0000 Subject: * fixed many stanza bugs * added stanza unhandled (unhandled iqs now reply with feature-not-implemented) * added stanza exceptions (stanzas may now reply with exceptions when their handler raises an exception) --- sleekxmpp/stanza/iq.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'sleekxmpp/stanza/iq.py') diff --git a/sleekxmpp/stanza/iq.py b/sleekxmpp/stanza/iq.py index 68a429e0..3961ead6 100644 --- a/sleekxmpp/stanza/iq.py +++ b/sleekxmpp/stanza/iq.py @@ -5,7 +5,7 @@ from .. xmlstream.handler.waiter import Waiter from .. xmlstream.matcher.id import MatcherId class Iq(StanzaBase): - interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject')) + interfaces = set(('type', 'to', 'from', 'id','query')) types = set(('get', 'result', 'set', 'error')) name = 'iq' namespace = 'jabber:client' @@ -13,7 +13,19 @@ class Iq(StanzaBase): def __init__(self, *args, **kwargs): StanzaBase.__init__(self, *args, **kwargs) if self['id'] == '': - self['id'] = self.stream.getId() + self['id'] = self.stream.getNewId() + + def exception(self, text): + self.reply() + self['error']['condition'] = 'undefined-condition' + self['error']['text'] = text + self.send() + + def unhandled(self): + self.reply() + self['error']['condition'] = 'feature-not-implemented' + self['error']['text'] = 'No handlers registered for this request.' + self.send() def result(self): self['type'] = 'result' @@ -36,6 +48,29 @@ class Iq(StanzaBase): self.clear() StanzaBase.setPayload(self, value) + def setQuery(self, value): + query = self.xml.find("{%s}query" % value) + if query is None: + self.clear() + query = ET.Element("{%s}query" % value) + self.xml.append(query) + return self + + def getQuery(self): + for child in self.getchildren(): + if child.tag.endswith('query'): + ns =child.tag.split('}')[0] + if '{' in ns: + ns = ns[1:] + return ns + return '' + + def delQuery(self): + for child in self.getchildren(): + if child.tag.endswith('query'): + self.xml.remove(child) + return self + def unhandled(self): pass # returned unhandled error -- cgit v1.2.3