diff options
-rw-r--r-- | sleekxmpp/plugins/xep_0060/pubsub.py | 3 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0060/stanza/pubsub.py | 26 | ||||
-rw-r--r-- | 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 2a31e374..ec3fb9bb 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 1a1de17a..45781c44 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 51a80c10..e0936660 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -484,6 +484,24 @@ class TestStreamPubsub(SleekTest): 'pubsub.example.com', 'somenode', 'ID1', + notify=True, + block=False) + self.send(""" + <iq type="set" id="1" to="pubsub.example.com"> + <pubsub xmlns="http://jabber.org/protocol/pubsub"> + <retract node="somenode" notify="true"> + <item id="ID1" /> + </retract> + </pubsub> + </iq> + """) + + def testRetract(self): + """Test deleting an item.""" + self.xmpp['xep_0060'].retract( + 'pubsub.example.com', + 'somenode', + 'ID1', block=False) self.send(""" <iq type="set" id="1" to="pubsub.example.com"> |