plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method

This commit is contained in:
Goffi 2017-03-13 23:18:00 +01:00
commit a022ae21af
2 changed files with 26 additions and 1 deletions

View file

@ -85,6 +85,7 @@ class XEP_0060(object):
self._mam = host.plugins.get('XEP-0313')
self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks)
self.rt_sessions = sat_defer.RTDeferredSessions()
host.bridge.addMethod("psNodeConfigurationGet", ".plugin", in_sign='sss', out_sign='a{ss}', method=self._getNodeConfiguration, async=True)
host.bridge.addMethod("psDeleteNode", ".plugin", in_sign='sss', out_sign='', method=self._deleteNode, async=True)
host.bridge.addMethod("psItemGet", ".plugin", in_sign='ssiassa{ss}s', out_sign='(asa{ss})', method=self._getItems, async=True)
host.bridge.addMethod("psRetractItem", ".plugin", in_sign='sssbs', out_sign='', method=self._retractItem, async=True)
@ -391,6 +392,30 @@ class XEP_0060(object):
client = self.host.getClient(profile_key)
return client.pubsub_client.createNode(service, nodeIdentifier, options)
def _getNodeConfiguration(self, service_s, nodeIdentifier, profile_key):
client = self.host.getClient(profile_key)
d = self.getConfiguration(client, jid.JID(service_s) if service_s else None, nodeIdentifier)
def serialize(form):
# FIXME: better more generic dataform serialisation should be available in SàT
return {f.var: unicode(f.value) for f in form.fields.values()}
d.addCallback(serialize)
return d
def getConfiguration(self, client, service, nodeIdentifier):
request = pubsub.PubSubRequest('configureGet')
request.recipient = service
request.nodeIdentifier = nodeIdentifier
def cb(iq):
form = data_form.findForm(iq.pubsub.configure,
pubsub.NS_PUBSUB_NODE_CONFIG)
form.typeCheck()
return form
d = request.send(client.xmlstream)
d.addCallback(cb)
return d
def _deleteNode(self, service_s, nodeIdentifier, profile_key):
return self.deleteNode(jid.JID(service_s) if service_s else None, nodeIdentifier, profile_key)

View file

@ -35,7 +35,7 @@ class ANSI(object):
this method simply merge arguments, and add RESET if is not the last arguments
"""
# XXX: we expect to have at least on argument
# XXX: we expect to have at least one argument
if args[-1] != cls.RESET:
args = list(args)
args.append(cls.RESET)