summaryrefslogtreecommitdiff
path: root/sleekxmpp/stanza/rootstanza.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2010-07-28 13:14:41 -0400
committerLance Stout <lancestout@gmail.com>2010-07-28 13:14:41 -0400
commitbd92ef6acfd9b1ecd390f08b28f1a3f4e7ec69a9 (patch)
tree1b1a1db7d76cc34bc02ffea6b5d05f49964f2d73 /sleekxmpp/stanza/rootstanza.py
parentaa02ecd1544c5fe7f5b3b82aa3b79da0e30da6e3 (diff)
downloadslixmpp-bd92ef6acfd9b1ecd390f08b28f1a3f4e7ec69a9.tar.gz
slixmpp-bd92ef6acfd9b1ecd390f08b28f1a3f4e7ec69a9.tar.bz2
slixmpp-bd92ef6acfd9b1ecd390f08b28f1a3f4e7ec69a9.tar.xz
slixmpp-bd92ef6acfd9b1ecd390f08b28f1a3f4e7ec69a9.zip
Updated RootStanza to use registerStanzaPlugin, and be PEP8 compliant.
Diffstat (limited to 'sleekxmpp/stanza/rootstanza.py')
-rw-r--r--sleekxmpp/stanza/rootstanza.py76
1 files changed, 51 insertions, 25 deletions
diff --git a/sleekxmpp/stanza/rootstanza.py b/sleekxmpp/stanza/rootstanza.py
index 3bae1f0d..fb5498f5 100644
--- a/sleekxmpp/stanza/rootstanza.py
+++ b/sleekxmpp/stanza/rootstanza.py
@@ -5,34 +5,60 @@
See the file LICENSE for copying permission.
"""
-from .. xmlstream.stanzabase import StanzaBase
-from xml.etree import cElementTree as ET
-from . error import Error
-from .. exceptions import XMPPError
+
import logging
import traceback
import sys
+from sleekxmpp.exceptions import XMPPError
+from sleekxmpp.stanza import Error
+from sleekxmpp.xmlstream.stanzabase import ET, StanzaBase, registerStanzaPlugin
+
+
class RootStanza(StanzaBase):
- def exception(self, e): #called when a handler raises an exception
- self.reply()
- if isinstance(e, XMPPError): # we raised this deliberately
- self['error']['condition'] = e.condition
- self['error']['text'] = e.text
- if e.extension is not None: # extended error tag
- extxml = ET.Element("{%s}%s" % (e.extension_ns, e.extension), e.extension_args)
- self['error'].xml.append(extxml)
- self['error']['type'] = e.etype
- else: # we probably didn't raise this on purpose, so send back a traceback
- self['error']['condition'] = 'undefined-condition'
- if sys.version_info < (3,0):
- self['error']['text'] = "SleekXMPP got into trouble."
- else:
- self['error']['text'] = traceback.format_tb(e.__traceback__)
- logging.exception('Error handling {%s}%s stanza' % (self.namespace, self.name))
- self.send()
-
-# all jabber:client root stanzas should have the error plugin
-RootStanza.plugin_attrib_map['error'] = Error
-RootStanza.plugin_tag_map["{%s}%s" % (Error.namespace, Error.name)] = Error
+ """
+ A top-level XMPP stanza in an XMLStream.
+
+ The RootStanza class provides a more XMPP specific exception
+ handler than provided by the generic StanzaBase class.
+
+ Methods:
+ exception -- Overrides StanzaBase.exception
+ """
+
+ def exception(self, e):
+ """
+ Create and send an error reply.
+
+ Typically called when an event handler raises an exception.
+ The error's type and text content are based on the exception
+ object's type and content.
+
+ Overrides StanzaBase.exception.
+
+ Arguments:
+ e -- Exception object
+ """
+ self.reply()
+ if isinstance(e, XMPPError):
+ # We raised this deliberately
+ self['error']['condition'] = e.condition
+ self['error']['text'] = e.text
+ if e.extension is not None:
+ # Extended error tag
+ extxml = ET.Element("{%s}%s" % (e.extension_ns, e.extension), e.extension_args)
+ self['error'].append(extxml)
+ self['error']['type'] = e.etype
+ else:
+ # We probably didn't raise this on purpose, so send back a traceback
+ self['error']['condition'] = 'undefined-condition'
+ if sys.version_info < (3,0):
+ self['error']['text'] = "SleekXMPP got into trouble."
+ else:
+ self['error']['text'] = traceback.format_tb(e.__traceback__)
+ logging.exception('Error handling {%s}%s stanza' % (self.namespace, self.name))
+ self.send()
+
+
+registerStanzaPlugin(RootStanza, Error)