diff options
author | Nathan Fritz <fritzy@netflint.net> | 2009-12-17 01:54:22 +0000 |
---|---|---|
committer | Nathan Fritz <fritzy@netflint.net> | 2009-12-17 01:54:22 +0000 |
commit | 07018c0afa7485b06424bf6787d242e7ee523d34 (patch) | |
tree | 5de2ae3309eb439b96d4dc5ce62abf00597f75f3 /sleekxmpp/stanza/iq.py | |
parent | 6897a0b57c299cff9e32fde4dcb4209e70fb4bcb (diff) | |
download | slixmpp-07018c0afa7485b06424bf6787d242e7ee523d34.tar.gz slixmpp-07018c0afa7485b06424bf6787d242e7ee523d34.tar.bz2 slixmpp-07018c0afa7485b06424bf6787d242e7ee523d34.tar.xz slixmpp-07018c0afa7485b06424bf6787d242e7ee523d34.zip |
* 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)
Diffstat (limited to 'sleekxmpp/stanza/iq.py')
-rw-r--r-- | sleekxmpp/stanza/iq.py | 39 |
1 files changed, 37 insertions, 2 deletions
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 |