summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conn_tests/test_pubsubserver.py40
-rw-r--r--sleekxmpp/plugins/stanza_pubsub.py33
-rw-r--r--sleekxmpp/stanza/rootstanza.py6
-rw-r--r--sleekxmpp/xmlstream/stanzabase.py10
4 files changed, 51 insertions, 38 deletions
diff --git a/conn_tests/test_pubsubserver.py b/conn_tests/test_pubsubserver.py
index 1750636f..25d84d40 100644
--- a/conn_tests/test_pubsubserver.py
+++ b/conn_tests/test_pubsubserver.py
@@ -8,6 +8,8 @@ import sys
import thread
import unittest
import sleekxmpp.plugins.xep_0004
+from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
+from sleekxmpp.xmlstream.handler.waiter import Waiter
try:
import configparser
except ImportError:
@@ -74,13 +76,47 @@ class TestPubsubServer(unittest.TestCase):
def test007publishitem(self):
"""Publishing item"""
item = ET.Element('{http://netflint.net/protocol/test}test')
- result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test_node1', item),))
+ w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
+ self.xmpp2.registerHandler(w)
+ result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
+ msg = w.wait(5) # got to get a result in 5 seconds
+ self.failUnless(msg != False, "Account #2 did not get message event")
self.failUnless(result)
#need to add check for update
+ def test008updateitem(self):
+ """Updating item"""
+ item = ET.Element('{http://netflint.net/protocol/test}test', {'someattr': 'hi there'})
+ w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
+ self.xmpp2.registerHandler(w)
+ result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
+ msg = w.wait(5) # got to get a result in 5 seconds
+ self.failUnless(msg != False, "Account #2 did not get message event")
+ self.failUnless(result)
+ #need to add check for update
+
+ def test009deleteitem(self):
+ """Deleting item"""
+ w = Waiter('wait retract', StanzaPath('message/pubsub_event/items@node=testnode2'))
+ self.xmpp2.registerHandler(w)
+ result = self.xmpp1['xep_0060'].deleteItem(self.pshost, "testnode2", "test1")
+ self.failUnless(result, "Got error when deleting item.")
+ msg = w.wait(1)
+ self.failUnless(msg != False, "Did not get retract notice.")
+
+ def test010unsubscribenode(self):
+ "Unsubscribing Account #2"
+ self.failUnless(self.xmpp2['xep_0060'].unsubscribe(self.pshost, "testnode2"), "Got error response when unsubscribing.")
+
+ def test011createcollectionnode(self):
+ "Create a collection node"
+ self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, "testnode3", self.statev['defaultconfig'], True))
+
+
def test999cleanup(self):
"Cleaning up"
- self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'))
+ self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5'), "Could not delete test node.")
+ self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3'), "Could not delete collection test node.")
if __name__ == '__main__':
diff --git a/sleekxmpp/plugins/stanza_pubsub.py b/sleekxmpp/plugins/stanza_pubsub.py
index 6ed84f1e..4187d49c 100644
--- a/sleekxmpp/plugins/stanza_pubsub.py
+++ b/sleekxmpp/plugins/stanza_pubsub.py
@@ -81,39 +81,6 @@ class Subscriptions(ElementBase):
plugin_tag_map = {}
subitem = (Subscription,)
- def __init__(self, *args, **kwargs):
- ElementBase.__init__(self, *args, **kwargs)
- self.subscriptions = []
- self.idx = 0
-
- def __iter__(self):
- self.idx = 0
- return self
-
- def __next__(self):
- self.idx += 1
- if self.idx + 1 > len(self.subscriptions):
- self.idx = 0
- raise StopIteration
- return self.subscriptions[self.idx]
-
- def __len__(self):
- return len(self.subscriptions)
-
- def append(self, subscription):
- if not isinstance(subscription, Subscription):
- raise TypeError
- self.xml.append(subscription.xml)
- return self.subscriptions.append(subscription)
-
- def pop(self, idx=0):
- aff = self.subscriptions.pop(idx)
- self.xml.remove(aff.xml)
- return aff
-
- def find(self, subscription):
- return self.subscriptions.find(subscription)
-
stanzaPlugin(Pubsub, Subscriptions)
class OptionalSetting(object):
diff --git a/sleekxmpp/stanza/rootstanza.py b/sleekxmpp/stanza/rootstanza.py
index 9c147e40..3b4822d8 100644
--- a/sleekxmpp/stanza/rootstanza.py
+++ b/sleekxmpp/stanza/rootstanza.py
@@ -10,6 +10,7 @@ from xml.etree import cElementTree as ET
from . error import Error
from .. exceptions import XMPPError
import traceback
+import sys
class RootStanza(StanzaBase):
@@ -24,7 +25,10 @@ class RootStanza(StanzaBase):
self['error']['type'] = e.etype
else: # we probably didn't raise this on purpose, so send back a traceback
self['error']['condition'] = 'undefined-condition'
- self['error']['text'] = traceback.format_tb(e.__traceback__)
+ if sys.version_info < (3,0):
+ self['error']['text'] = "SleekXMPP got into trouble."
+ else:
+ self['error']['text'] = traceback.format_tb(e.__traceback__)
self.send()
# all jabber:client root stanzas should have the error plugin
diff --git a/sleekxmpp/xmlstream/stanzabase.py b/sleekxmpp/xmlstream/stanzabase.py
index ae9e9df7..57c727a3 100644
--- a/sleekxmpp/xmlstream/stanzabase.py
+++ b/sleekxmpp/xmlstream/stanzabase.py
@@ -77,11 +77,14 @@ class ElementBase(tostring.ToString):
def __next__(self):
self.idx += 1
- if self.idx + 1 > len(self.iterables):
+ if self.idx > len(self.iterables):
self.idx = 0
raise StopIteration
- return self.affiliations[self.idx]
+ return self.iterables[self.idx - 1]
+ def next(self):
+ return self.__next__()
+
def __len__(self):
return len(self.iterables)
@@ -140,6 +143,9 @@ class ElementBase(tostring.ToString):
def find(self, xpath): # for backwards compatiblity, expose elementtree interface
return self.xml.find(xpath)
+
+ def findall(self, xpath):
+ return self.xml.findall(xpath)
def setup(self, xml=None):
if self.xml is None: