From 0fdbbd1fedc662d3fca62ff81272aff8ca2200bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Thu, 29 Aug 2019 19:07:24 +0200 Subject: Add StanzaMalformedError Before we raised CommonError even if the stanza was not an error node. Now we raise the dedicated StanzaMalformedError. --- nbxmpp/structs.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'nbxmpp/structs.py') diff --git a/nbxmpp/structs.py b/nbxmpp/structs.py index d86d48f..5c7358e 100644 --- a/nbxmpp/structs.py +++ b/nbxmpp/structs.py @@ -368,13 +368,11 @@ class CommonError: self.id = stanza.getID() self._text = {} - error = stanza.getTag('error') - if error is not None: - text_elements = error.getTags('text', namespace=NS_STANZAS) - for element in text_elements: - lang = element.getXmlLang() - text = element.getData() - self._text[lang] = text + text_elements = self._error_node.getTags('text', namespace=NS_STANZAS) + for element in text_elements: + lang = element.getXmlLang() + text = element.getData() + self._text[lang] = text def get_text(self, pref_lang=None): if pref_lang is not None: @@ -406,6 +404,26 @@ class CommonError: return 'Error from %s: %s%s' % (self.jid, condition, text) +class StanzaMalformedError(CommonError): + def __init__(self, stanza, text): + self._error_node = None + self.condition = 'stanza-malformed' + self.condition_data = None + self.app_condition = None + self.type = None + self.jid = stanza.getFrom() + self.id = stanza.getID() + self._text = {} + if text: + self._text['en'] = text + + def __str__(self): + text = self.get_text('en') + if text: + text = ': %s' % text + return 'Received malformed stanza from %s%s' % (self.jid, text) + + class TuneData(namedtuple('TuneData', 'artist length rating source title track uri')): __slots__ = [] -- cgit v1.2.3