Merge branch 'develop' into stream_features

This commit is contained in:
Lance Stout 2011-03-23 10:01:21 -04:00
commit 694673b9bd
5 changed files with 111 additions and 40 deletions

View file

@ -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.stanza import Invite
from sleekxmpp.plugins.xep_0249.invite import xep_0249 from sleekxmpp.plugins.xep_0249.invite import xep_0249

View file

@ -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 import logging
@ -11,6 +16,7 @@ from sleekxmpp.xmlstream.handler import Callback
from sleekxmpp.xmlstream.matcher import StanzaPath from sleekxmpp.xmlstream.matcher import StanzaPath
from sleekxmpp.plugins.xep_0249 import Invite from sleekxmpp.plugins.xep_0249 import Invite
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -34,15 +40,14 @@ class xep_0249(base_plugin):
def post_init(self): def post_init(self):
base_plugin.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. Raise an event for all invitations received.
""" """
log.debug("Received direct muc invitation from %s to room %s", 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) 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. Send a direct MUC invitation to an XMPP entity.
Arguments: Arguments:
jid -- The jid of the entity to which the inviation jid -- The JID of the entity that will receive
is sent the invitation
roomjid -- the address of the groupchat room to be joined roomjid -- the address of the groupchat room to be joined
password -- a password needed for entry into a password -- a password needed for entry into a
password-protected room (OPTIONAL). password-protected room (OPTIONAL).
reason -- a human-readable purpose for the invitation reason -- a human-readable purpose for the invitation
(OPTIONAL). (OPTIONAL).
""" """
message = self.xmpp.Message() msg = self.xmpp.Message()
message['to'] = jid msg['to'] = jid
if ifrom is not None: if ifrom is not None:
message['from'] = ifrom msg['from'] = ifrom
message['groupchat_invite']['jid'] = roomjid msg['groupchat_invite']['jid'] = roomjid
if password is not None: if password is not None:
message['groupchat_invite']['password'] = password msg['groupchat_invite']['password'] = password
if reason is not None: if reason is not None:
message['groupchat_invite']['reason'] = reason msg['groupchat_invite']['reason'] = reason
return message.send() return msg.send()

View file

@ -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 from sleekxmpp.xmlstream import ElementBase
class Invite(ElementBase): class Invite(ElementBase):
""" """
XMPP allows for an agent in an MUC room to directly invite another 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 user to join the chat room (as opposed to a mediated invitation
@ -17,13 +26,14 @@ class Invite(ElementBase):
</message> </message>
Stanza Interface: Stanza Interface:
jid -- The JID of the groupchat room jid -- The JID of the groupchat room
password -- The password used to gain entry in the room password -- The password used to gain entry in the room
(optional) (optional)
reason -- The reason for the invitation (optional) reason -- The reason for the invitation (optional)
""" """
name = "x" name = "x"
namespace = "jabber:x:conference" namespace = "jabber:x:conference"
plugin_attrib = "groupchat_invite" plugin_attrib = "groupchat_invite"
interfaces = ("jid", "password", "reason") interfaces = ("jid", "password", "reason")

View file

@ -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)

15
todo1.0
View file

@ -10,8 +10,6 @@ Plugins:
PEP8 PEP8
Documentation Documentation
Stream/Unit tests Stream/Unit tests
0030
Done
0033 0033
PEP8 PEP8
Documentation Documentation
@ -22,8 +20,6 @@ Plugins:
Stream/Unit tests Stream/Unit tests
0050 0050
Review replacement in github.com/legastero/adhoc Review replacement in github.com/legastero/adhoc
0059
Done
0060 0060
PEP8 PEP8
Documentation Documentation
@ -41,21 +37,10 @@ Plugins:
PEP8 PEP8
Documentation Documentation
Consider any simplifications. Consider any simplifications.
0092
Done
0128
Needs complete rewrite to work with new 0030 plugin.
0199
PEP8
Documentation
Stream/Unit tests
Needs to use scheduler instead of its own thread.
0202 0202
PEP8 PEP8
Documentation Documentation
Stream/Unit tests Stream/Unit tests
0249
Review, minor cleanup
gmail_notify gmail_notify
PEP8 PEP8
Documentation Documentation