diff --git a/slixmpp/plugins/xep_0377/stanza.py b/slixmpp/plugins/xep_0377/stanza.py index 89ec66a9..1930c382 100644 --- a/slixmpp/plugins/xep_0377/stanza.py +++ b/slixmpp/plugins/xep_0377/stanza.py @@ -26,6 +26,8 @@ class Report(ElementBase): abuse -- Flag the report as abuse spam -- Flag the report as spam text -- Add a reason to the report + + Only one or element can be present at once. """ name = "report" namespace = "urn:xmpp:reporting:0" @@ -33,29 +35,34 @@ class Report(ElementBase): interfaces = ("spam", "abuse", "text") sub_interfaces = {'text'} + def _purge_spam(self): + spam = self.xml.findall('{%s}spam' % self.namespace) + for element in spam: + self.xml.remove(element) + + def _purge_abuse(self): + abuse = self.xml.findall('{%s}abuse' % self.namespace) + for element in abuse: + self.xml.remove(element) + def get_spam(self): return self.xml.find('{%s}spam' % self.namespace) is not None def set_spam(self, value): - if bool(value) and not self.get_spam(): + self._purge_spam() + if bool(value): + self._purge_abuse() self.xml.append(ET.Element('{%s}spam' % self.namespace)) - elif not bool(value): - found = self.xml.findall('{%s}spam' % self.namespace) - if elm: - for item in found: - self.xml.remove(item) def get_abuse(self): return self.xml.find('{%s}abuse' % self.namespace) is not None def set_abuse(self, value): - if bool(value) and not self.get_abuse(): + self._purge_abuse() + if bool(value): + self._purge_spam() self.xml.append(ET.Element('{%s}abuse' % self.namespace)) - elif not bool(value): - found = self.xml.findall('{%s}abuse' % self.namespace) - if elm: - for item in found: - self.xml.remove(item) + class Text(ElementBase): name = "text"