From 58e0f1e6c3a8dd6eea19e05aa9367a3dd2ceca70 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Fri, 16 Mar 2012 10:51:25 -0700 Subject: Expand support for XEP-0184. New stanza interfaces: Adding a message receipt request: msg['request_receipt'] = True Adding a message receipt: msg['receipt'] = '123-24234' Retrieving the acked message ID: ack_id = msg['receipt'] print(ack_id) '123-24234' New configuration options: auto_ack: If True, auto reply to messages that request receipts. Defaults to True auto_request: If True, auto add receipt requests to appropriate outgoing messages. Defaults to False --- sleekxmpp/plugins/xep_0184/stanza.py | 50 ++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 13 deletions(-) (limited to 'sleekxmpp/plugins/xep_0184/stanza.py') diff --git a/sleekxmpp/plugins/xep_0184/stanza.py b/sleekxmpp/plugins/xep_0184/stanza.py index 42ba8c3f..d1654ef8 100644 --- a/sleekxmpp/plugins/xep_0184/stanza.py +++ b/sleekxmpp/plugins/xep_0184/stanza.py @@ -12,34 +12,58 @@ from sleekxmpp.xmlstream.stanzabase import ElementBase, ET class Request(ElementBase): namespace = 'urn:xmpp:receipts' name = 'request' - plugin_attrib = 'request_reciept' - interfaces = set(('request_reciept',)) + plugin_attrib = 'request_receipt' + interfaces = set(('request_receipt',)) + sub_interfaces = interfaces is_extension = True def setup(self, xml=None): self.xml = ET.Element('') return True - def set_request_reciept(self, val): - self.del_request_reciept() - parent = self.parent() + def set_request_receipt(self, val): + self.del_request_receipt() if val: - self.xml = ET.Element("{%s}%s" % (self.namespace, self.name)) - parent.append(self.xml) + parent = self.parent() + parent._set_sub_text("{%s}request" % self.namespace, keep=True) - def get_request_reciept(self): + def get_request_receipt(self): parent = self.parent() - if parent.find("{%s}%s" % (self.namespace, self.name)) is not None: + if parent.find("{%s}request" % self.namespace) is not None: return True else: return False - def del_request_reciept(self): - self.xml = ET.Element('') + def del_request_receipt(self): + self.parent()._del_sub("{%s}request" % self.namespace) class Received(ElementBase): namespace = 'urn:xmpp:receipts' name = 'received' - plugin_attrib = 'reciept_received' - interfaces = set(('id',)) + plugin_attrib = 'receipt' + interfaces = set(['receipt']) + sub_interfaces = interfaces + is_extension = True + + def setup(self, xml=None): + self.xml = ET.Element('') + return True + + def set_receipt(self, value): + self.del_receipt() + if value: + parent = self.parent() + xml = ET.Element("{%s}received" % self.namespace) + xml.attrib['id'] = value + parent.append(xml) + + def get_receipt(self): + parent = self.parent() + xml = parent.find("{%s}received" % self.namespace) + if xml is not None: + return xml.attrib.get('id', '') + return '' + + def del_receipt(self): + self.parent()._del_sub('{%s}received' % self.namespace) -- cgit v1.2.3