cloudmonkey: autocomplete filter options

Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/commit/8202b8bb
Tree: 
http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/tree/8202b8bb
Diff: 
http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/diff/8202b8bb

Branch: refs/heads/5.3
Commit: 8202b8bb18f830e2d53f03da92261fd4eebefdae
Parents: ccb3a75
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
Authored: Fri Oct 31 06:17:59 2014 +0530
Committer: Rohit Yadav <rohit.ya...@shapeblue.com>
Committed: Fri Oct 31 06:17:59 2014 +0530

----------------------------------------------------------------------
 cloudmonkey/cachemaker.py  |  1 +
 cloudmonkey/cloudmonkey.py | 17 ++++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/blob/8202b8bb/cloudmonkey/cachemaker.py
----------------------------------------------------------------------
diff --git a/cloudmonkey/cachemaker.py b/cloudmonkey/cachemaker.py
index 47749e5..2f2fa87 100644
--- a/cloudmonkey/cachemaker.py
+++ b/cloudmonkey/cachemaker.py
@@ -132,6 +132,7 @@ def monkeycache(apis):
 
         apidict['requiredparams'] = required
         apidict['params'] = apiparams
+        apidict['response'] = getvalue(api, 'response')
         if verb not in cache:
             cache[verb] = {}
         cache[verb][subject] = apidict

http://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey/blob/8202b8bb/cloudmonkey/cloudmonkey.py
----------------------------------------------------------------------
diff --git a/cloudmonkey/cloudmonkey.py b/cloudmonkey/cloudmonkey.py
index 5213e67..08ccb4d 100644
--- a/cloudmonkey/cloudmonkey.py
+++ b/cloudmonkey/cloudmonkey.py
@@ -424,7 +424,22 @@ class CloudMonkeyShell(cmd.Cmd, object):
                 idx = param.find("=")
                 value = param[idx + 1:]
                 param = param[:idx]
-                if len(value) < 36 and idx != -1:
+                if param == "filter":
+                    response_params = self.apicache[verb][subject]["response"]
+                    used = filter(lambda x: x.strip() != "", 
value.split(",")[:-1])
+                    unused = map(lambda x: x['name'] + ",", filter(lambda x:
+                                 "name" in x and x["name"] not in used,
+                                 response_params))
+                    last_value = value.split(",")[-1]
+                    if last_value:
+                        unused = filter(lambda x: x.startswith(last_value),
+                                        unused)
+                    suffix = ",".join(used)
+                    if suffix:
+                        suffix += ","
+                    return filter(lambda x: x.startswith(value),
+                                  map(lambda x: suffix + x, unused))
+                elif len(value) < 36 and idx != -1:
                     api = None
                     logger.debug("[Paramcompl] For %s %s %s=" % (verb, subject,
                                                                  param))

Reply via email to