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"