summaryrefslogtreecommitdiff
path: root/sleekxmpp/stanza
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-02-11 15:20:26 -0500
committerLance Stout <lancestout@gmail.com>2011-02-11 15:20:26 -0500
commit0d326383799a7d7bb69fec9dcd1eaf9e1a64eab8 (patch)
tree20bf5d0037cdd33bf45460c7001dd593643293b0 /sleekxmpp/stanza
parentc4b1212c44e0758c6361ca46c6c3a90e27ac876f (diff)
downloadslixmpp-0d326383799a7d7bb69fec9dcd1eaf9e1a64eab8.tar.gz
slixmpp-0d326383799a7d7bb69fec9dcd1eaf9e1a64eab8.tar.bz2
slixmpp-0d326383799a7d7bb69fec9dcd1eaf9e1a64eab8.tar.xz
slixmpp-0d326383799a7d7bb69fec9dcd1eaf9e1a64eab8.zip
XMPPError exceptions can keep a stanza's contents.
This allows exceptions to include the original content of a stanza in the error response by including the parameter clear=False when raising the exception.
Diffstat (limited to 'sleekxmpp/stanza')
-rw-r--r--sleekxmpp/stanza/iq.py8
-rw-r--r--sleekxmpp/stanza/message.py6
-rw-r--r--sleekxmpp/stanza/presence.py8
-rw-r--r--sleekxmpp/stanza/rootstanza.py3
4 files changed, 18 insertions, 7 deletions
diff --git a/sleekxmpp/stanza/iq.py b/sleekxmpp/stanza/iq.py
index c6aa64d0..841d282c 100644
--- a/sleekxmpp/stanza/iq.py
+++ b/sleekxmpp/stanza/iq.py
@@ -144,7 +144,7 @@ class Iq(RootStanza):
self.xml.remove(child)
return self
- def reply(self):
+ def reply(self, clear=True):
"""
Send a reply <iq> stanza.
@@ -152,9 +152,13 @@ class Iq(RootStanza):
Sets the 'type' to 'result' in addition to the default
StanzaBase.reply behavior.
+
+ Arguments:
+ clear -- Indicates if existing content should be
+ removed before replying. Defaults to True.
"""
self['type'] = 'result'
- StanzaBase.reply(self)
+ StanzaBase.reply(self, clear)
return self
def send(self, block=True, timeout=None, callback=None):
diff --git a/sleekxmpp/stanza/message.py b/sleekxmpp/stanza/message.py
index 66c74d8a..6f0cf212 100644
--- a/sleekxmpp/stanza/message.py
+++ b/sleekxmpp/stanza/message.py
@@ -104,7 +104,7 @@ class Message(RootStanza):
self['type'] = 'normal'
return self
- def reply(self, body=None):
+ def reply(self, body=None, clear=True):
"""
Create a message reply.
@@ -114,7 +114,9 @@ class Message(RootStanza):
adds a message body if one is given.
Arguments:
- body -- Optional text content for the message.
+ body -- Optional text content for the message.
+ clear -- Indicates if existing content should be removed
+ before replying. Defaults to True.
"""
StanzaBase.reply(self)
if self['type'] == 'groupchat':
diff --git a/sleekxmpp/stanza/presence.py b/sleekxmpp/stanza/presence.py
index 7dcd8f90..60dddf64 100644
--- a/sleekxmpp/stanza/presence.py
+++ b/sleekxmpp/stanza/presence.py
@@ -173,14 +173,18 @@ class Presence(RootStanza):
# The priority is not a number: we consider it 0 as a default
return 0
- def reply(self):
+ def reply(self, clear=True):
"""
Set the appropriate presence reply type.
Overrides StanzaBase.reply.
+
+ Arguments:
+ clear -- Indicates if the stanza contents should be removed
+ before replying. Defaults to True.
"""
if self['type'] == 'unsubscribe':
self['type'] = 'unsubscribed'
elif self['type'] == 'subscribe':
self['type'] = 'subscribed'
- return StanzaBase.reply(self)
+ return StanzaBase.reply(self, clear)
diff --git a/sleekxmpp/stanza/rootstanza.py b/sleekxmpp/stanza/rootstanza.py
index 8123c5f8..bc11476e 100644
--- a/sleekxmpp/stanza/rootstanza.py
+++ b/sleekxmpp/stanza/rootstanza.py
@@ -43,8 +43,8 @@ class RootStanza(StanzaBase):
Arguments:
e -- Exception object
"""
- self.reply()
if isinstance(e, XMPPError):
+ self.reply(clear=e.clear)
# We raised this deliberately
self['error']['condition'] = e.condition
self['error']['text'] = e.text
@@ -56,6 +56,7 @@ class RootStanza(StanzaBase):
self['error']['type'] = e.etype
self.send()
else:
+ self.reply()
# We probably didn't raise this on purpose, so send an error stanza
self['error']['condition'] = 'undefined-condition'
self['error']['text'] = "SleekXMPP got into trouble."