XEP-0030: allow get_info and get_items to return a coroutine

This commit is contained in:
mathieui 2015-02-23 19:09:55 +01:00
parent 8ac0ecdf40
commit 506ca69917
No known key found for this signature in database
GPG Key ID: C59F84CEEFD616E3

View File

@ -10,6 +10,7 @@ import logging
from slixmpp import Iq from slixmpp import Iq
from slixmpp.plugins import BasePlugin from slixmpp.plugins import BasePlugin
from slixmpp import coroutine_wrapper
from slixmpp.xmlstream.handler import Callback from slixmpp.xmlstream.handler import Callback
from slixmpp.xmlstream.matcher import StanzaPath from slixmpp.xmlstream.matcher import StanzaPath
from slixmpp.xmlstream import register_stanza_plugin, JID from slixmpp.xmlstream import register_stanza_plugin, JID
@ -288,6 +289,7 @@ class XEP_0030(BasePlugin):
'cached': cached} 'cached': cached}
return self.api['has_identity'](jid, node, ifrom, data) return self.api['has_identity'](jid, node, ifrom, data)
@coroutine_wrapper
def get_info(self, jid=None, node=None, local=None, def get_info(self, jid=None, node=None, local=None,
cached=None, **kwargs): cached=None, **kwargs):
""" """
@ -362,8 +364,9 @@ class XEP_0030(BasePlugin):
iq['to'] = jid iq['to'] = jid
iq['type'] = 'get' iq['type'] = 'get'
iq['disco_info']['node'] = node if node else '' iq['disco_info']['node'] = node if node else ''
iq.send(timeout=kwargs.get('timeout', None), return iq.send(timeout=kwargs.get('timeout', None),
callback=kwargs.get('callback', None), callback=kwargs.get('callback', None),
coroutine=kwargs.get('coroutine', False),
timeout_callback=kwargs.get('timeout_callback', None)) timeout_callback=kwargs.get('timeout_callback', None))
def set_info(self, jid=None, node=None, info=None): def set_info(self, jid=None, node=None, info=None):
@ -375,6 +378,7 @@ class XEP_0030(BasePlugin):
info = info['disco_info'] info = info['disco_info']
self.api['set_info'](jid, node, None, info) self.api['set_info'](jid, node, None, info)
@coroutine_wrapper
def get_items(self, jid=None, node=None, local=False, **kwargs): def get_items(self, jid=None, node=None, local=False, **kwargs):
""" """
Retrieve the disco#items results from a given JID/node combination. Retrieve the disco#items results from a given JID/node combination.
@ -423,8 +427,9 @@ class XEP_0030(BasePlugin):
raise NotImplementedError("XEP 0059 has not yet been fixed") raise NotImplementedError("XEP 0059 has not yet been fixed")
return self.xmpp['xep_0059'].iterate(iq, 'disco_items') return self.xmpp['xep_0059'].iterate(iq, 'disco_items')
else: else:
iq.send(timeout=kwargs.get('timeout', None), return iq.send(timeout=kwargs.get('timeout', None),
callback=kwargs.get('callback', None), callback=kwargs.get('callback', None),
coroutine=kwargs.get('coroutine', False),
timeout_callback=kwargs.get('timeout_callback', None)) timeout_callback=kwargs.get('timeout_callback', None))
def set_items(self, jid=None, node=None, **kwargs): def set_items(self, jid=None, node=None, **kwargs):