summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-09-01 13:36:11 -0700
committerLance Stout <lancestout@gmail.com>2011-09-01 13:36:11 -0700
commit7e5e9542e9873a251986bedfe274904e629920d0 (patch)
tree42e1ccf02383d5ea60591c26634b3d2e7d087e9f
parentd7fc2aaa9cd8427f73c78f1e6bfbc1c9e1569cf6 (diff)
downloadslixmpp-7e5e9542e9873a251986bedfe274904e629920d0.tar.gz
slixmpp-7e5e9542e9873a251986bedfe274904e629920d0.tar.bz2
slixmpp-7e5e9542e9873a251986bedfe274904e629920d0.tar.xz
slixmpp-7e5e9542e9873a251986bedfe274904e629920d0.zip
Add support for notify attribute when retracting an item.
-rw-r--r--sleekxmpp/plugins/xep_0060/pubsub.py3
-rw-r--r--sleekxmpp/plugins/xep_0060/stanza/pubsub.py26
-rw-r--r--tests/test_stream_xep_0060.py18
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">