summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2020-05-24 13:46:47 +0200
committermathieui <mathieui@mathieui.net>2020-05-24 13:46:47 +0200
commitef961392beaf3111d01c32e4d183df681b03d492 (patch)
treee8f08c2c48471577da69373d8afe962cc1de1e37
parent2e31de3f456ac2e9e4d2950c04ff3594fe41db65 (diff)
downloadslixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.gz
slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.bz2
slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.xz
slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.zip
Enforce <spam/> and <abuse/> quantity constraints
-rw-r--r--slixmpp/plugins/xep_0377/stanza.py31
1 files changed, 19 insertions, 12 deletions
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 <spam/> or <abuse/> 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"