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(