From 76bc0a2ba679828d17871c43bfe076b077c9b600 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Wed, 31 Aug 2011 23:48:22 -0700 Subject: XEP-0060 v1.13 dictates publishing/retracting one item at a time. --- sleekxmpp/plugins/xep_0060/pubsub.py | 24 +++---- sleekxmpp/plugins/xep_0060/stanza/pubsub.py | 3 +- tests/test_stream_xep_0060.py | 106 +++++----------------------- 3 files changed, 26 insertions(+), 107 deletions(-) diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py index e1f20254..627ad37a 100644 --- a/sleekxmpp/plugins/xep_0060/pubsub.py +++ b/sleekxmpp/plugins/xep_0060/pubsub.py @@ -282,9 +282,8 @@ class xep_0060(base_plugin): iq['pubsub_owner']['configure']['form'].values = config.values return iq.send(block=block, callback=callback, timeout=timeout) - def publish(self, jid, node, item_id=None, payload=None, items=None, - options=None, ifrom=None, block=True, callback=None, - timeout=None): + def publish(self, jid, node, id=None, payload=None, options=None, + ifrom=None, block=True, callback=None, timeout=None): """ Add or edit items in a node. @@ -294,21 +293,14 @@ class xep_0060(base_plugin): """ iq = self.xmpp.Iq(sto=jid, sfrom=ifrom, stype='set') iq['pubsub']['publish']['node'] = node - - if items is None: - items = [] - if item_id is not None: - items.insert(0, (item_id, payload)) - for id, payload in items: - item = stanza.pubsub.Item() - if id is not None: - item['id'] = id - item['payload'] = payload - iq['pubsub']['publish'].append(item) + if id is not None: + iq['pubsub']['publish']['item']['id'] = id + if payload is not None: + iq['pubsub']['publish']['item']['payload'] = payload iq['pubsub']['publish_options'] = options return iq.send(block=block, callback=callback, timeout=timeout) - def retract(self, jid, node, item_id, ifrom=None, block=True, + def retract(self, jid, node, id, ifrom=None, block=True, callback=None, timeout=None): """ Delete a single item from a node. @@ -316,7 +308,7 @@ class xep_0060(base_plugin): iq = self.xmpp.Iq(sto=jid, sfrom=ifrom, stype='set') iq['pubsub']['retract']['node'] = node - iq['pubsub']['retract']['item']['id'] = item_id + iq['pubsub']['retract']['item']['id'] = id return iq.send(block=block, callback=callback, timeout=timeout) def purge(self, jid, node, ifrom=None, block=True, callback=None, diff --git a/sleekxmpp/plugins/xep_0060/stanza/pubsub.py b/sleekxmpp/plugins/xep_0060/stanza/pubsub.py index c370aeb9..9f3fbe22 100644 --- a/sleekxmpp/plugins/xep_0060/stanza/pubsub.py +++ b/sleekxmpp/plugins/xep_0060/stanza/pubsub.py @@ -140,7 +140,7 @@ registerStanzaPlugin(Pubsub, Create) # #registerStanzaPlugin(Pubsub, Default) -class Publish(Items): +class Publish(ElementBase): namespace = 'http://jabber.org/protocol/pubsub' name = 'publish' plugin_attrib = name @@ -150,6 +150,7 @@ class Publish(Items): subitem = (Item,) registerStanzaPlugin(Pubsub, Publish) +registerStanzaPlugin(Publish, Item) class Retract(ElementBase): namespace = 'http://jabber.org/protocol/pubsub' diff --git a/tests/test_stream_xep_0060.py b/tests/test_stream_xep_0060.py index a9099b34..626cea98 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -359,120 +359,51 @@ class TestStreamPubsub(SleekTest): """) - def testPublishSingle(self): - """Test publishing a single item.""" - payload = AtomEntry() - payload['title'] = 'Test' - - register_stanza_plugin(self.xmpp['xep_0060'].stanza.Item, AtomEntry) - + def testPublishNoItems(self): + """Test publishing no items (in order to generate events)""" self.xmpp['xep_0060'].publish( 'pubsub.example.com', 'somenode', - item_id='ID42', - payload=payload, block=False) self.send(""" - - - - Test - - - + """) - def testPublishSingleOptions(self): - """Test publishing a single item, with options.""" + def testPublishSingle(self): + """Test publishing a single item.""" payload = AtomEntry() payload['title'] = 'Test' register_stanza_plugin(self.xmpp['xep_0060'].stanza.Item, AtomEntry) - options = self.xmpp['xep_0004'].make_form() - options.add_field(var='FORM_TYPE', ftype='hidden', - value='http://jabber.org/protocol/pubsub#publish-options') - options.add_field(var='pubsub#access_model', ftype='text-single', - value='presence') - options['type'] = 'submit' - self.xmpp['xep_0060'].publish( 'pubsub.example.com', 'somenode', - item_id='ID42', + id='id42', payload=payload, - options=options, block=False) self.send(""" - + Test - - - - http://jabber.org/protocol/pubsub#publish-options - - - presence - - - - - - """, use_values=False) - - def testPublishMulti(self): - """Test publishing multiple items.""" - payload1 = AtomEntry() - payload1['title'] = 'Test 1' - - payload2 = AtomEntry() - payload2['title'] = 'Test 2' - - register_stanza_plugin(self.xmpp['xep_0060'].stanza.Item, AtomEntry) - - self.xmpp['xep_0060'].publish( - 'pubsub.example.com', - 'somenode', - items=[('ID1', payload1), - ('ID2', payload2)], - block=False) - self.send(""" - - - - - - Test 1 - - - - - Test 2 - - - - """, use_values=False) - - def testPublishMultiOptions(self): - """Test publishing multiple items, with options.""" - payload1 = AtomEntry() - payload1['title'] = 'Test 1' + """) - payload2 = AtomEntry() - payload2['title'] = 'Test 2' + def testPublishSingleOptions(self): + """Test publishing a single item, with options.""" + payload = AtomEntry() + payload['title'] = 'Test' register_stanza_plugin(self.xmpp['xep_0060'].stanza.Item, AtomEntry) @@ -486,22 +417,17 @@ class TestStreamPubsub(SleekTest): self.xmpp['xep_0060'].publish( 'pubsub.example.com', 'somenode', - items=[('ID1', payload1), - ('ID2', payload2)], + id='ID42', + payload=payload, options=options, block=False) self.send(""" - - - Test 1 - - - + - Test 2 + Test -- cgit v1.2.3