# HG changeset patch # User Goffi # Date 1489443480 -3600 # Node ID d3e48c9a255e4d44f430ba24f7ad2e7fb9f7e670 # Parent d65275ac39b3cf20057cd88e8c3796c4ae91649e plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method diff -r d65275ac39b3 -r d3e48c9a255e src/plugins/plugin_xep_0060.py --- a/src/plugins/plugin_xep_0060.py Mon Mar 13 23:17:13 2017 +0100 +++ b/src/plugins/plugin_xep_0060.py Mon Mar 13 23:18:00 2017 +0100 @@ -85,6 +85,7 @@ 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 @@ 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) diff -r d65275ac39b3 -r d3e48c9a255e src/tools/common/ansi.py --- a/src/tools/common/ansi.py Mon Mar 13 23:17:13 2017 +0100 +++ b/src/tools/common/ansi.py Mon Mar 13 23:18:00 2017 +0100 @@ -35,7 +35,7 @@ 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)