From 7e5e9542e9873a251986bedfe274904e629920d0 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Thu, 1 Sep 2011 13:36:11 -0700 Subject: [PATCH] Add support for notify attribute when retracting an item. --- sleekxmpp/plugins/xep_0060/pubsub.py | 3 ++- sleekxmpp/plugins/xep_0060/stanza/pubsub.py | 26 +++++++++++++++++---- tests/test_stream_xep_0060.py | 18 ++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py index 2a31e37..ec3fb9b 100644 --- a/sleekxmpp/plugins/xep_0060/pubsub.py +++ b/sleekxmpp/plugins/xep_0060/pubsub.py @@ -317,7 +317,7 @@ class xep_0060(base_plugin): iq['pubsub']['publish_options'] = options return iq.send(block=block, callback=callback, timeout=timeout) - def retract(self, jid, node, id, ifrom=None, block=True, + def retract(self, jid, node, id, notify=None, ifrom=None, block=True, callback=None, timeout=None): """ Delete a single item from a node. @@ -325,6 +325,7 @@ class xep_0060(base_plugin): iq = self.xmpp.Iq(sto=jid, sfrom=ifrom, stype='set') iq['pubsub']['retract']['node'] = node + iq['pubsub']['retract']['notify'] = notify iq['pubsub']['retract']['item']['id'] = id return iq.send(block=block, callback=callback, timeout=timeout) diff --git a/sleekxmpp/plugins/xep_0060/stanza/pubsub.py b/sleekxmpp/plugins/xep_0060/stanza/pubsub.py index 1a1de17..45781c4 100644 --- a/sleekxmpp/plugins/xep_0060/stanza/pubsub.py +++ b/sleekxmpp/plugins/xep_0060/stanza/pubsub.py @@ -129,6 +129,23 @@ class Retract(ElementBase): plugin_attrib = name interfaces = set(('node', 'notify')) + def get_notify(self): + notify = self._get_attr('notify') + if notify in ('0', 'false'): + return False + elif notify in ('1', 'true'): + return True + return None + + def set_notify(self, value): + del self['notify'] + if value is None: + return + elif value in (True, '1', 'true', 'True'): + self._set_attr('notify', 'true') + else: + self._set_attr('notify', 'false') + class Unsubscribe(ElementBase): namespace = 'http://jabber.org/protocol/pubsub' @@ -252,6 +269,11 @@ class PubsubStateEvent(ElementBase): intefaces = set(tuple()) +register_stanza_plugin(Iq, PubsubState) +register_stanza_plugin(Message, PubsubStateEvent) +register_stanza_plugin(PubsubStateEvent, PubsubState) + + register_stanza_plugin(Iq, Pubsub) register_stanza_plugin(Pubsub, Affiliations) register_stanza_plugin(Pubsub, Configure) @@ -274,7 +296,3 @@ register_stanza_plugin(Retract, Item) register_stanza_plugin(Subscribe, Options) register_stanza_plugin(Subscription, SubscribeOptions) register_stanza_plugin(Subscriptions, Subscription, iterable=True) - -register_stanza_plugin(Message, PubsubStateEvent) -register_stanza_plugin(Iq, PubsubState) -register_stanza_plugin(PubsubStateEvent, PubsubState) diff --git a/tests/test_stream_xep_0060.py b/tests/test_stream_xep_0060.py index 51a80c1..e093666 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -478,6 +478,24 @@ class TestStreamPubsub(SleekTest): """, use_values=False) + def testRetract(self): + """Test deleting an item.""" + self.xmpp['xep_0060'].retract( + 'pubsub.example.com', + 'somenode', + 'ID1', + notify=True, + block=False) + self.send(""" + + + + + + + + """) + def testRetract(self): """Test deleting an item.""" self.xmpp['xep_0060'].retract(