Expand support of XEP-0172 (user nickname) to include PEP.

This commit is contained in:
Lance Stout 2012-03-11 00:22:28 -08:00
parent 10ec92f7c6
commit 7d89fa27a8
6 changed files with 178 additions and 60 deletions

View file

@ -75,6 +75,7 @@ packages = [ 'sleekxmpp',
'sleekxmpp/plugins/xep_0115',
'sleekxmpp/plugins/xep_0118',
'sleekxmpp/plugins/xep_0128',
'sleekxmpp/plugins/xep_0172',
'sleekxmpp/plugins/xep_0184',
'sleekxmpp/plugins/xep_0199',
'sleekxmpp/plugins/xep_0202',

View file

@ -32,6 +32,7 @@ __all__ = [
'xep_0118', # User Tune
'xep_0128', # Extended Service Discovery
'xep_0163', # Personal Eventing Protocol
'xep_0172', # User Nickname
'xep_0199', # Ping
'xep_0202', # Entity Time
'xep_0203', # Delayed Delivery

View file

@ -0,0 +1,11 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""
from sleekxmpp.plugins.xep_0172 import stanza
from sleekxmpp.plugins.xep_0172.stanza import UserNick
from sleekxmpp.plugins.xep_0172.user_nick import xep_0172

View file

@ -0,0 +1,67 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""
from sleekxmpp.xmlstream import ElementBase, ET
class UserNick(ElementBase):
"""
XEP-0172: User Nickname allows the addition of a <nick> element
in several stanza types, including <message> and <presence> stanzas.
The nickname contained in a <nick> should be the global, friendly or
informal name chosen by the owner of a bare JID. The <nick> element
may be included when establishing communications with new entities,
such as normal XMPP users or MUC services.
The nickname contained in a <nick> element will not necessarily be
the same as the nickname used in a MUC.
Example stanzas:
<message to="user@example.com">
<nick xmlns="http://jabber.org/nick/nick">The User</nick>
<body>...</body>
</message>
<presence to="otheruser@example.com" type="subscribe">
<nick xmlns="http://jabber.org/nick/nick">The User</nick>
</presence>
Stanza Interface:
nick -- A global, friendly or informal name chosen by a user.
Methods:
setup -- Overrides ElementBase.setup.
get_nick -- Return the nickname in the <nick> element.
set_nick -- Add a <nick> element with the given nickname.
del_nick -- Remove the <nick> element.
"""
namespace = 'http://jabber.org/protocol/nick'
name = 'nick'
plugin_attrib = name
interfaces = set(('nick',))
def set_nick(self, nick):
"""
Add a <nick> element with the given nickname.
Arguments:
nick -- A human readable, informal name.
"""
self.xml.text = nick
def get_nick(self):
"""Return the nickname in the <nick> element."""
return self.xml.text
def del_nick(self):
"""Remove the <nick> element."""
if self.parent is not None:
self.parent().xml.remove(self.xml)

View file

@ -0,0 +1,93 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""
import logging
from sleekxmpp.stanza.message import Message
from sleekxmpp.stanza.presence import Presence
from sleekxmpp.xmlstream import register_stanza_plugin
from sleekxmpp.xmlstream.handler import Callback
from sleekxmpp.xmlstream.matcher import MatchXPath
from sleekxmpp.plugins.base import base_plugin
from sleekxmpp.plugins.xep_0172 import stanza, UserNick
log = logging.getLogger(__name__)
class xep_0172(base_plugin):
"""
XEP-0172: User Nickname
"""
def plugin_init(self):
self.xep = '0172'
self.description = 'User Nickname'
self.stanza = stanza
def post_init(self):
base_plugin.post_init(self)
pubsub_stanza = self.xmpp['xep_0060'].stanza
register_stanza_plugin(Message, UserNick)
register_stanza_plugin(Presence, UserNick)
register_stanza_plugin(pubsub_stanza.EventItem, UserNick)
self.xmpp['xep_0030'].add_feature(UserNick.namespace)
self.xmpp['xep_0163'].add_interest(UserNick.namespace)
self.xmpp['xep_0060'].map_node_event(UserNick.namespace, 'user_nick')
def publish_nick(self, nick=None, options=None, ifrom=None, block=True,
callback=None, timeout=None):
"""
Publish the user's current nick.
Arguments:
nick -- The user nickname to publish.
options -- Optional form of publish options.
ifrom -- Specify the sender's JID.
block -- Specify if the send call will block until a response
is received, or a timeout occurs. Defaults to True.
timeout -- The length of time (in seconds) to wait for a response
before exiting the send call if blocking is used.
Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
callback -- Optional reference to a stream handler function. Will
be executed when a reply stanza is received.
"""
nickname = UserNick()
nickname['nick'] = nick
self.xmpp['xep_0163'].publish(nickname,
node=UserNick.namespace,
options=options,
ifrom=ifrom,
block=block,
callback=callback,
timeout=timeout)
def stop(self, ifrom=None, block=True, callback=None, timeout=None):
"""
Clear existing user nick information to stop notifications.
Arguments:
ifrom -- Specify the sender's JID.
block -- Specify if the send call will block until a response
is received, or a timeout occurs. Defaults to True.
timeout -- The length of time (in seconds) to wait for a response
before exiting the send call if blocking is used.
Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
callback -- Optional reference to a stream handler function. Will
be executed when a reply stanza is received.
"""
nick = UserNick()
self.xmpp['xep_0163'].publish(nick,
node=UserNick.namespace,
ifrom=ifrom,
block=block,
callback=callback,
timeout=timeout)

View file

@ -6,67 +6,12 @@
See the file LICENSE for copying permission.
"""
# The nickname stanza has been moved to its own plugin, but the existing
# references are kept for backwards compatibility.
from sleekxmpp.stanza import Message, Presence
from sleekxmpp.xmlstream import ElementBase, register_stanza_plugin
class Nick(ElementBase):
"""
XEP-0172: User Nickname allows the addition of a <nick> element
in several stanza types, including <message> and <presence> stanzas.
The nickname contained in a <nick> should be the global, friendly or
informal name chosen by the owner of a bare JID. The <nick> element
may be included when establishing communications with new entities,
such as normal XMPP users or MUC services.
The nickname contained in a <nick> element will not necessarily be
the same as the nickname used in a MUC.
Example stanzas:
<message to="user@example.com">
<nick xmlns="http://jabber.org/nick/nick">The User</nick>
<body>...</body>
</message>
<presence to="otheruser@example.com" type="subscribe">
<nick xmlns="http://jabber.org/nick/nick">The User</nick>
</presence>
Stanza Interface:
nick -- A global, friendly or informal name chosen by a user.
Methods:
setup -- Overrides ElementBase.setup.
get_nick -- Return the nickname in the <nick> element.
set_nick -- Add a <nick> element with the given nickname.
del_nick -- Remove the <nick> element.
"""
namespace = 'http://jabber.org/protocol/nick'
name = 'nick'
plugin_attrib = name
interfaces = set(('nick',))
def set_nick(self, nick):
"""
Add a <nick> element with the given nickname.
Arguments:
nick -- A human readable, informal name.
"""
self.xml.text = nick
def get_nick(self):
"""Return the nickname in the <nick> element."""
return self.xml.text
def del_nick(self):
"""Remove the <nick> element."""
if self.parent is not None:
self.parent().xml.remove(self.xml)
from sleekxmpp.xmlstream import register_stanza_plugin
from sleekxmpp.plugins.xep_0172 import UserNick as Nick
register_stanza_plugin(Message, Nick)
register_stanza_plugin(Presence, Nick)