summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-03-23 10:00:32 -0400
committerLance Stout <lancestout@gmail.com>2011-03-23 10:00:32 -0400
commit833f95b53af47903d8e4281e8d5668a5addc2383 (patch)
treedae184a3d13958d5d06b2e8a5f5759f30cb881be
parent4b1fadde4bd87a8763131165701c08a3035005eb (diff)
downloadslixmpp-833f95b53af47903d8e4281e8d5668a5addc2383.tar.gz
slixmpp-833f95b53af47903d8e4281e8d5668a5addc2383.tar.bz2
slixmpp-833f95b53af47903d8e4281e8d5668a5addc2383.tar.xz
slixmpp-833f95b53af47903d8e4281e8d5668a5addc2383.zip
Cleaned XEP-0249 plugin, added tests.
-rw-r--r--sleekxmpp/plugins/xep_0249/__init__.py8
-rw-r--r--sleekxmpp/plugins/xep_0249/invite.py44
-rw-r--r--sleekxmpp/plugins/xep_0249/stanza.py20
-rw-r--r--tests/test_stream_xep_0249.py64
4 files changed, 111 insertions, 25 deletions
diff --git a/sleekxmpp/plugins/xep_0249/__init__.py b/sleekxmpp/plugins/xep_0249/__init__.py
index 4af19a2b..e88d87ac 100644
--- a/sleekxmpp/plugins/xep_0249/__init__.py
+++ b/sleekxmpp/plugins/xep_0249/__init__.py
@@ -1,2 +1,10 @@
+"""
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2011 Nathanael C. Fritz, Dalek
+ This file is part of SleekXMPP.
+
+ See the file LICENSE for copying permission.
+"""
+
from sleekxmpp.plugins.xep_0249.stanza import Invite
from sleekxmpp.plugins.xep_0249.invite import xep_0249
diff --git a/sleekxmpp/plugins/xep_0249/invite.py b/sleekxmpp/plugins/xep_0249/invite.py
index 7c966f15..fdeffdea 100644
--- a/sleekxmpp/plugins/xep_0249/invite.py
+++ b/sleekxmpp/plugins/xep_0249/invite.py
@@ -1,5 +1,10 @@
-"""Direct MUC Invitation."""
+"""
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2011 Nathanael C. Fritz, Dalek
+ This file is part of SleekXMPP.
+ See the file LICENSE for copying permission.
+"""
import logging
@@ -11,6 +16,7 @@ from sleekxmpp.xmlstream.handler import Callback
from sleekxmpp.xmlstream.matcher import StanzaPath
from sleekxmpp.plugins.xep_0249 import Invite
+
log = logging.getLogger(__name__)
@@ -34,15 +40,14 @@ class xep_0249(base_plugin):
def post_init(self):
base_plugin.post_init(self)
- self.xmpp.plugin['xep_0030'].add_feature(Invite.namespace)
+ self.xmpp['xep_0030'].add_feature(Invite.namespace)
- def _handle_invite(self, message):
+ def _handle_invite(self, msg):
"""
Raise an event for all invitations received.
-
"""
log.debug("Received direct muc invitation from %s to room %s",
- message['from'], message['groupchat_invite']['jid'])
+ msg['from'], msg['groupchat_invite']['jid'])
self.xmpp.event('groupchat_direct_invite', message)
@@ -52,24 +57,23 @@ class xep_0249(base_plugin):
Send a direct MUC invitation to an XMPP entity.
Arguments:
- jid -- The jid of the entity to which the inviation
- is sent
- roomjid -- the address of the groupchat room to be joined
- password -- a password needed for entry into a
- password-protected room (OPTIONAL).
- reason -- a human-readable purpose for the invitation
- (OPTIONAL).
-
+ jid -- The JID of the entity that will receive
+ the invitation
+ roomjid -- the address of the groupchat room to be joined
+ password -- a password needed for entry into a
+ password-protected room (OPTIONAL).
+ reason -- a human-readable purpose for the invitation
+ (OPTIONAL).
"""
- message = self.xmpp.Message()
- message['to'] = jid
+ msg = self.xmpp.Message()
+ msg['to'] = jid
if ifrom is not None:
- message['from'] = ifrom
- message['groupchat_invite']['jid'] = roomjid
+ msg['from'] = ifrom
+ msg['groupchat_invite']['jid'] = roomjid
if password is not None:
- message['groupchat_invite']['password'] = password
+ msg['groupchat_invite']['password'] = password
if reason is not None:
- message['groupchat_invite']['reason'] = reason
+ msg['groupchat_invite']['reason'] = reason
- return message.send()
+ return msg.send()
diff --git a/sleekxmpp/plugins/xep_0249/stanza.py b/sleekxmpp/plugins/xep_0249/stanza.py
index 43bb65d0..ba4060d7 100644
--- a/sleekxmpp/plugins/xep_0249/stanza.py
+++ b/sleekxmpp/plugins/xep_0249/stanza.py
@@ -1,7 +1,16 @@
+"""
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2011 Nathanael C. Fritz, Dalek
+ This file is part of SleekXMPP.
+
+ See the file LICENSE for copying permission.
+"""
+
from sleekxmpp.xmlstream import ElementBase
class Invite(ElementBase):
+
"""
XMPP allows for an agent in an MUC room to directly invite another
user to join the chat room (as opposed to a mediated invitation
@@ -17,13 +26,14 @@ class Invite(ElementBase):
</message>
Stanza Interface:
- jid -- The JID of the groupchat room
- password -- The password used to gain entry in the room
- (optional)
- reason -- The reason for the invitation (optional)
+ jid -- The JID of the groupchat room
+ password -- The password used to gain entry in the room
+ (optional)
+ reason -- The reason for the invitation (optional)
"""
+
name = "x"
namespace = "jabber:x:conference"
plugin_attrib = "groupchat_invite"
- interfaces = ("jid", "password", "reason") \ No newline at end of file
+ interfaces = ("jid", "password", "reason")
diff --git a/tests/test_stream_xep_0249.py b/tests/test_stream_xep_0249.py
new file mode 100644
index 00000000..f49d1f7e
--- /dev/null
+++ b/tests/test_stream_xep_0249.py
@@ -0,0 +1,64 @@
+import sys
+import time
+import threading
+
+from sleekxmpp.test import *
+from sleekxmpp.xmlstream import ElementBase
+
+
+class TestStreamDirectInvite(SleekTest):
+
+ """
+ Test using the XEP-0249 plugin.
+ """
+
+ def tearDown(self):
+ sys.excepthook = sys.__excepthook__
+ self.stream_close()
+
+ def testReceiveInvite(self):
+ self.stream_start(mode='client',
+ plugins=['xep_0030',
+ 'xep_0249'])
+
+ events = []
+
+ def handle_invite(msg):
+ events.append(True)
+
+ self.xmpp.add_event_handler('groupchat_direct_invite',
+ handle_invite)
+
+ self.recv("""
+ <message>
+ <x xmlns="jabber:x:conference"
+ jid="sleek@conference.jabber.org"
+ password="foo"
+ reason="For testing" />
+ </message>
+ """)
+
+ time.sleep(.5)
+
+ self.failUnless(events == [True],
+ "Event not raised: %s" % events)
+
+ def testSentDirectInvite(self):
+ self.stream_start(mode='client',
+ plugins=['xep_0030',
+ 'xep_0249'])
+
+ self.xmpp['xep_0249'].send_invitation('user@example.com',
+ 'sleek@conference.jabber.org',
+ reason='Need to test Sleek')
+
+ self.send("""
+ <message to="user@example.com">
+ <x xmlns="jabber:x:conference"
+ jid="sleek@conference.jabber.org"
+ reason="Need to test Sleek" />
+ </message>
+ """)
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamDirectInvite)