changeset 2279:e2f96cd1887b

jp (cmd_pubsub): xmpp: uri handling, first draft
author Goffi <goffi@goffi.org>
date Wed, 28 Jun 2017 19:19:08 +0200
parents 489efbda377c
children 4bc9a2c2d6c9
files frontends/src/jp/cmd_pubsub.py frontends/src/jp/common.py
diffstat 2 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/frontends/src/jp/cmd_pubsub.py	Wed Jun 28 01:28:41 2017 +0200
+++ b/frontends/src/jp/cmd_pubsub.py	Wed Jun 28 19:19:08 2017 +0200
@@ -59,6 +59,7 @@
         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 @@
         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 @@
         self.host.quit(C.EXIT_BRIDGE_ERRBACK)
 
     def start(self):
+        common.checkURI(self.args)
         self.host.bridge.psItemsGet(
             self.args.service,
             self.args.node,
--- a/frontends/src/jp/common.py	Wed Jun 28 01:28:41 2017 +0200
+++ b/frontends/src/jp/common.py	Wed Jun 28 19:19:08 2017 +0200
@@ -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 @@
         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