This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git


The following commit(s) were added to refs/heads/master by this push:
     new 01c1f1f  cli: implement heuristics based completer as a fallback
01c1f1f is described below

commit 01c1f1f1473fe51d71e7e77915c783b96c981b11
Author: Rohit Yadav <ro...@apache.org>
AuthorDate: Thu Oct 25 11:39:37 2018 +0530

    cli: implement heuristics based completer as a fallback
    
    This implements a API heuristics based options API arg completer based
    on the related API name for an arg, or if a list API exists whose name
    contains the arg name.
    
    Signed-off-by: Rohit Yadav <ro...@apache.org>
---
 cli/completer.go | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/cli/completer.go b/cli/completer.go
index 06bd29b..29c944f 100644
--- a/cli/completer.go
+++ b/cli/completer.go
@@ -18,7 +18,6 @@
 package cli
 
 import (
-       "fmt"
        "sort"
        "strings"
 
@@ -152,6 +151,22 @@ func completer(in prompt.Document) []prompt.Suggest {
                                                                break
                                                        }
                                                }
+                                               if optionsAPI == nil {
+                                                       if 
len(argFound.Related) > 0 {
+                                                               apiCache := 
cfg.GetCache()
+                                                               relatedAPIName 
:= strings.ToLower(argFound.Related[0])
+                                                               if 
apiCache[relatedAPIName] != nil {
+                                                                       
optionsAPI = apiCache[relatedAPIName]
+                                                               }
+                                                       } else {
+                                                               for _, related 
:= range apiMap["list"] {
+                                                                       if 
strings.Contains(related.Noun, relatedNoun) {
+                                                                               
optionsAPI = related
+                                                                               
break
+                                                                       }
+                                                               }
+                                                       }
+                                               }
                                                if optionsAPI != nil {
                                                        r := 
cmd.NewRequest(nil, cfg, nil)
                                                        optionsArgs := 
[]string{"listall=true"}
@@ -160,7 +175,6 @@ func completer(in prompt.Document) []prompt.Suggest {
                                                        }
 
                                                        if cachedResponse == 
nil {
-                                                               fmt.Println("")
                                                                spinner := 
cfg.StartSpinner("fetching options, please wait...")
                                                                cachedResponse, 
_ = cmd.NewAPIRequest(r, optionsAPI.Name, optionsArgs, false)
                                                                
cfg.StopSpinner(spinner)
@@ -186,7 +200,7 @@ func completer(in prompt.Document) []prompt.Suggest {
                                                                                
} else if resource["username"] != nil {
                                                                                
        opt.Description = resource["username"].(string)
                                                                                
}
-                                                                               
if opt.Text == "" {
+                                                                               
if argFound.Type == "string" {
                                                                                
        opt.Text = opt.Description
                                                                                
}
                                                                                
s = append(s, opt)

Reply via email to