Add support for XEP-0152: Reachability Addresses
This commit is contained in:
parent
d3284f1604
commit
7b49c82210
5 changed files with 140 additions and 0 deletions
1
setup.py
1
setup.py
|
@ -92,6 +92,7 @@ packages = [ 'sleekxmpp',
|
|||
'sleekxmpp/plugins/xep_0118',
|
||||
'sleekxmpp/plugins/xep_0128',
|
||||
'sleekxmpp/plugins/xep_0131',
|
||||
'sleekxmpp/plugins/xep_0152',
|
||||
'sleekxmpp/plugins/xep_0153',
|
||||
'sleekxmpp/plugins/xep_0172',
|
||||
'sleekxmpp/plugins/xep_0184',
|
||||
|
|
|
@ -50,6 +50,7 @@ __all__ = [
|
|||
'xep_0128', # Extended Service Discovery
|
||||
'xep_0131', # Standard Headers and Internet Metadata
|
||||
'xep_0133', # Service Administration
|
||||
'xep_0152', # Reachability Addresses
|
||||
'xep_0153', # vCard-Based Avatars
|
||||
'xep_0163', # Personal Eventing Protocol
|
||||
'xep_0172', # User Nickname
|
||||
|
|
16
sleekxmpp/plugins/xep_0152/__init__.py
Normal file
16
sleekxmpp/plugins/xep_0152/__init__.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from sleekxmpp.plugins.base import register_plugin
|
||||
|
||||
from sleekxmpp.plugins.xep_0152 import stanza
|
||||
from sleekxmpp.plugins.xep_0152.stanza import Reachability
|
||||
from sleekxmpp.plugins.xep_0152.reachability import XEP_0152
|
||||
|
||||
|
||||
register_plugin(XEP_0152)
|
93
sleekxmpp/plugins/xep_0152/reachability.py
Normal file
93
sleekxmpp/plugins/xep_0152/reachability.py
Normal file
|
@ -0,0 +1,93 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from sleekxmpp.plugins.base import BasePlugin
|
||||
from sleekxmpp.plugins.xep_0152 import stanza, Reachability
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class XEP_0152(BasePlugin):
|
||||
|
||||
"""
|
||||
XEP-0152: Reachability Addresses
|
||||
"""
|
||||
|
||||
name = 'xep_0152'
|
||||
description = 'XEP-0152: Reachability Addresses'
|
||||
dependencies = set(['xep_0163'])
|
||||
stanza = stanza
|
||||
|
||||
def plugin_end(self):
|
||||
self.xmpp['xep_0030'].del_feature(feature=Reachability.namespace)
|
||||
self.xmpp['xep_0163'].remove_interest(Reachability.namespace)
|
||||
|
||||
def session_bind(self, jid):
|
||||
self.xmpp['xep_0163'].register_pep('reachability', Reachability)
|
||||
|
||||
def publish_reachability(self, addresses, options=None,
|
||||
ifrom=None, block=True, callback=None, timeout=None):
|
||||
"""
|
||||
Publish alternative addresses where the user can be reached.
|
||||
|
||||
Arguments:
|
||||
addresses -- A list of dictionaries containing the URI and
|
||||
optional description for each address.
|
||||
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.
|
||||
"""
|
||||
if not isinstance(addresses, (list, tuple)):
|
||||
addresses = [addresses]
|
||||
reach = Reachability()
|
||||
for address in addresses:
|
||||
if not hasattr(address, 'items'):
|
||||
address = {'uri': address}
|
||||
|
||||
addr = stanza.Address()
|
||||
for key, val in address.items():
|
||||
addr[key] = val
|
||||
reach.append(addr)
|
||||
return self.xmpp['xep_0163'].publish(reach,
|
||||
node=Reachability.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 activity 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.
|
||||
"""
|
||||
reach = Reachability()
|
||||
return self.xmpp['xep_0163'].publish(reach,
|
||||
node=Reachability.namespace,
|
||||
ifrom=ifrom,
|
||||
block=block,
|
||||
callback=callback,
|
||||
timeout=timeout)
|
29
sleekxmpp/plugins/xep_0152/stanza.py
Normal file
29
sleekxmpp/plugins/xep_0152/stanza.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Copyright (C) 2013 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, register_stanza_plugin
|
||||
|
||||
|
||||
class Reachability(ElementBase):
|
||||
name = 'reach'
|
||||
namespace = 'urn:xmpp:reach:0'
|
||||
plugin_attrib = 'reach'
|
||||
interfaces = set()
|
||||
|
||||
|
||||
class Address(ElementBase):
|
||||
name = 'addr'
|
||||
namespace = 'urn:xmpp:reach:0'
|
||||
plugin_attrib = 'address'
|
||||
plugin_multi_attrib = 'addresses'
|
||||
interfaces = set(['uri', 'desc'])
|
||||
lang_interfaces = set(['desc'])
|
||||
sub_interfaces = set(['desc'])
|
||||
|
||||
|
||||
register_stanza_plugin(Reachability, Address, iterable=True)
|
Loading…
Reference in a new issue