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):
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("""
+
+
+
+ """)
+
+ 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("""
+
+
+
+ """)
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamDirectInvite)