diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py index e1f2025..627ad37 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 c370aeb..9f3fbe2 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 a9099b3..626cea9 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -359,6 +359,20 @@ class TestStreamPubsub(SleekTest): """) + def testPublishNoItems(self): + """Test publishing no items (in order to generate events)""" + self.xmpp['xep_0060'].publish( + 'pubsub.example.com', + 'somenode', + block=False) + self.send(""" + + + + + + """) + def testPublishSingle(self): """Test publishing a single item.""" payload = AtomEntry() @@ -369,14 +383,14 @@ class TestStreamPubsub(SleekTest): self.xmpp['xep_0060'].publish( 'pubsub.example.com', 'somenode', - item_id='ID42', + id='id42', payload=payload, block=False) self.send(""" - + Test @@ -403,7 +417,7 @@ class TestStreamPubsub(SleekTest): self.xmpp['xep_0060'].publish( 'pubsub.example.com', 'somenode', - item_id='ID42', + id='ID42', payload=payload, options=options, block=False) @@ -431,94 +445,6 @@ class TestStreamPubsub(SleekTest): """, 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' - - 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', - items=[('ID1', payload1), - ('ID2', payload2)], - options=options, - block=False) - self.send(""" - - - - - - Test 1 - - - - - Test 2 - - - - - - - http://jabber.org/protocol/pubsub#publish-options - - - presence - - - - - - """, use_values=False) - def testRetract(self): """Test deleting an item.""" self.xmpp['xep_0060'].retract(