Skip to content
Snippets Groups Projects

Improve usability and better output formatting for gosndc

Merged Malte Bauch requested to merge cli-refactoring-pterm into develop
All threads resolved!
2 files
+ 53
36
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 39
36
@@ -47,7 +47,7 @@ import (
// PromptCompleter provides completion for a device
type PromptCompleter struct {
//NOTE: not too sure about this but for now it should be sufficient
//NOTE: should be removed
deviceID uuid.UUID
yangSchemaCompleterMap map[uuid.UUID]*completer.YangSchemaCompleter
}
@@ -113,7 +113,7 @@ func (pc *PromptCompleter) cstmCompleter(d prompt.Document) []prompt.Suggest {
currCmd = c
}
return completionBasedOnCmd(pc, currCmd, inputSplit, inputFlags, d)
return completionBasedOnCmd(pc, currCmd, inputSplitFiltered, inputFlags, d)
}
func filterFlagSlice(input []string) (commandSlice []string, flagSlice []string) {
@@ -128,51 +128,54 @@ func filterFlagSlice(input []string) (commandSlice []string, flagSlice []string)
}
func deviceGetCompletion(c *PromptCompleter, d prompt.Document, inputSplit []string) []prompt.Suggest {
inputLen := len(inputSplit)
if inputLen == 2 || inputLen == 3 {
if id, err := uuid.Parse(inputSplit[inputLen-1]); err == nil {
if c, ok := c.yangSchemaCompleterMap[id]; ok {
return c.Complete(d)
}
dev, err := pndAdapter.GetDevice(id.String())
if err != nil {
return []prompt.Suggest{}
}
sid, err := uuid.Parse(dev[0].GetSbi().GetId())
if err != nil {
return []prompt.Suggest{}
}
schemaTree, err := pndAdapter.GetSbiSchemaTree(sid)
if err != nil {
return []prompt.Suggest{}
}
c.yangSchemaCompleterMap[id] = completer.NewYangSchemaCompleter(schemaTree["Device"], true)
if yc, ok := c.yangSchemaCompleterMap[id]; ok {
c.deviceID = id
return yc.Complete(d)
}
switch inputLen := len(inputSplit); inputLen {
case 2:
return devicePrompt(d)
case 3:
id, err := uuid.Parse(inputSplit[inputLen-1])
if err != nil {
return devicePrompt(d)
}
if c, ok := c.yangSchemaCompleterMap[id]; ok {
return c.Complete(d)
}
schemaTree, err := getSchemaTreeForDeviceID(id.String())
if err != nil {
return []prompt.Suggest{}
}
c.yangSchemaCompleterMap[id] = completer.NewYangSchemaCompleter(schemaTree["Device"], true)
if yc, ok := c.yangSchemaCompleterMap[id]; ok {
c.deviceID = id
return yc.Complete(d)
}
case 4:
if d.GetWordBeforeCursor() == "" || d.GetWordAfterCursor() != "" {
return []prompt.Suggest{}
}
if inputLen == 2 || (inputLen == 3 && !(d.GetWordBeforeCursor() == "")) {
spinner, _ := pterm.DefaultSpinner.Start("Requesting devices from controller.")
devices, err := getDevices()
if err != nil {
spinner.Fail(err)
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
}
spinner.Success()
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
_, err := uuid.Parse(inputSplit[inputLen-2])
if err != nil {
return devicePrompt(d)
}
} else {
if yc, ok := c.yangSchemaCompleterMap[c.deviceID]; ok {
return yc.Complete(d)
}
default:
return []prompt.Suggest{}
}
return []prompt.Suggest{}
}
func devicePrompt(d prompt.Document) []prompt.Suggest {
spinner, _ := pterm.DefaultSpinner.Start("Requesting devices from controller.")
devices, err := getDevices()
if err != nil {
spinner.Fail(err)
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
}
spinner.Success()
return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
}
func cobraCommandCompletion(currCmd *cobra.Command, d prompt.Document, inputFlags []string, loaded []prompt.Suggest) []prompt.Suggest {
if currCmd.HasAvailableFlags() {
currCmd.LocalFlags().VisitAll(
Loading