From c2ae6579c30a0c0e8c0e55b692e4e9a140d78d7f Mon Sep 17 00:00:00 2001 From: Goffi Date: Wed, 28 Jun 2017 19:19:08 +0200 Subject: [PATCH] jp (cmd_pubsub): xmpp: uri handling, first draft --- frontends/src/jp/cmd_pubsub.py | 3 +++ frontends/src/jp/common.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/frontends/src/jp/cmd_pubsub.py b/frontends/src/jp/cmd_pubsub.py index 6d9423c2..368303b6 100644 --- a/frontends/src/jp/cmd_pubsub.py +++ b/frontends/src/jp/cmd_pubsub.py @@ -59,6 +59,7 @@ class NodeInfo(base.CommandBase): self.host.quit(C.EXIT_BRIDGE_ERRBACK) def start(self): + common.checkURI(self.args) self.host.bridge.psNodeConfigurationGet( self.args.service, self.args.node, @@ -198,6 +199,7 @@ class NodeAffiliationsGet(base.CommandBase): self.host.quit(C.EXIT_BRIDGE_ERRBACK) def start(self): + common.checkURI(self.args) self.host.bridge.psNodeAffiliationsGet( self.args.service, self.args.node, @@ -285,6 +287,7 @@ class Get(base.CommandBase): self.host.quit(C.EXIT_BRIDGE_ERRBACK) def start(self): + common.checkURI(self.args) self.host.bridge.psItemsGet( self.args.service, self.args.node, diff --git a/frontends/src/jp/common.py b/frontends/src/jp/common.py index c068ab31..38331c2b 100644 --- a/frontends/src/jp/common.py +++ b/frontends/src/jp/common.py @@ -20,6 +20,7 @@ from sat_frontends.jp.constants import Const as C from sat.core.i18n import _ from sat.tools.common import regex +from sat.tools.common import uri from sat.tools import config from ConfigParser import NoSectionError, NoOptionError import json @@ -81,6 +82,32 @@ def parse_args(host, cmd_line, **format_kw): return [] +def checkURI(args): + """check if args.node is an URI + + if a valid xmpp: URI is found, args.service, args.node and args.item will be set + """ + # FIXME: Q&D way to handle xmpp: uris, a generic way is needed + # and it should be merged with code in BaseEdit + if not args.service and args.node.startswith('xmpp:'): + try: + uri_data = uri.parseXMPPUri(args.node) + except ValueError: + pass + else: + if uri_data[u'type'] == 'pubsub': + args.service = uri_data[u'path'] + args.node = uri_data[u'node'] + if u'item' in uri_data: + try: + item = getattr(uri_data, 'item') + except AttributeError: + pass + else: + if item is None: + args.item = uri_data + + class BaseEdit(object): u"""base class for editing commands