Michael Pasternak has uploaded a new change for review.
Change subject: cli: mismatch between restore snapshot syntax and auto
completion #1027298
......................................................................
cli: mismatch between restore snapshot syntax and auto completion #1027298
1. Replaces current line with new content formated according
to command syntax, use-case:
* action could not be determinated unless object parent/s is/are specified
from:
action object xxx --parent-identifier yyy action-name
to:
action object xxx action-name --parent-identifier yyy
2. replaces history entry with reformatted content
Change-Id: Ibf7bb40e8fe2f933ccbfae75a0e031235b2dc07d
Signed-off-by: Michael pasternak <[email protected]>
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1027298
---
M src/ovirtcli/historymanager.py
M src/ovirtcli/shell/actioncmdshell.py
M src/ovirtcli/shell/engineshell.py
3 files changed, 80 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine-cli refs/changes/90/22090/1
diff --git a/src/ovirtcli/historymanager.py b/src/ovirtcli/historymanager.py
index 9ab618d..d86c073 100644
--- a/src/ovirtcli/historymanager.py
+++ b/src/ovirtcli/historymanager.py
@@ -77,6 +77,10 @@
if self.length() > 0:
readline.remove_history_item(entry)
+ def add(self, entry):
+ if self.enabled:
+ readline.add_history(entry)
+
def __unregister_dump_callback(self):
for item in atexit._exithandlers:
if hasattr(item[0], 'func_name') and \
diff --git a/src/ovirtcli/shell/actioncmdshell.py
b/src/ovirtcli/shell/actioncmdshell.py
index 60593f7..cae318e 100644
--- a/src/ovirtcli/shell/actioncmdshell.py
+++ b/src/ovirtcli/shell/actioncmdshell.py
@@ -20,7 +20,7 @@
from ovirtcli.utils.autocompletionhelper import AutoCompletionHelper
from ovirtsdk.infrastructure import brokers
from ovirtcli.utils.methodhelper import MethodHelper
-
+import sys
class ActionCmdShell(CmdShell):
NAME = 'action'
@@ -31,7 +31,76 @@
self.identifier_template = '--%s-identifier'
def do_action(self, args):
- return self.context.execute_string(ActionCmdShell.NAME + ' ' + args +
'\n')
+ nargs = self.__reformat_args(args)
+ return self.context.execute_string(ActionCmdShell.NAME + ' ' + nargs +
'\n')
+
+ def __update_history(self, nargs):
+ """
+ replaces history entry with reformatted content
+
+ @param nargs: new entry to add
+ """
+ if self.context.history.length() >= 1:
+ self.context.history.remove(self.context.history.length() - 1)
+ self.context.history.add(ActionCmdShell.NAME + " " + nargs)
+
+ def __reformat_args(self, args):
+ """
+ 1. Replaces current line with new content formated according
+ to command syntax, use-case:
+
+ * action could not be determinated unless object parent/s is/are
specified
+
+ from:
+ action object xxx --parent-identifier yyy action-name
+ to:
+ action object xxx action-name --parent-identifier yyy
+
+ 2. replaces history entry with reformatted content
+
+ @param args: original args
+ @return: reformatted args
+ """
+ cursor_up = '\x1b[1A'
+ erase_line = '\x1b[K'
+ sys.stdout.write(cursor_up + erase_line)
+ nargs = self.__reformat_command(args)
+ self.print_line(
+ self.prompt + ActionCmdShell.NAME + " " + nargs,
+ no_prompt=True
+ )
+ self.__update_history(nargs)
+ return nargs
+
+ def __reformat_command(self, s):
+ """
+ Reformats command according to the default command syntax,
+ use-case:
+
+ * action name could not be determinated unless object parents is
specified
+
+ from:
+ action object xxx --parent-identifier yyy action-name
+ to:
+ action object xxx action-name --parent-identifier yyy
+
+ """
+ line = ''
+ arguments = ''
+ tokens = s.split(' ')
+ tokens_len = len(tokens)
+ i = 0
+ while i < tokens_len:
+ if tokens[i].startswith('--'):
+ arguments = arguments + ' ' + tokens[i].strip()
+ i = i + 1
+ if i < tokens_len and not tokens[i].startswith('--'):
+ arguments = arguments + ' ' + tokens[i].strip()
+ i = i + 1
+ else:
+ line = line + ' ' + tokens[i].strip()
+ i = i + 1
+ return line.strip() + ' ' + arguments.strip()
def __add_resource_specific_options(self, obj, specific_options, line,
key=None):
obj_type = TypeHelper.getDecoratorType(TypeHelper.to_singular(obj))
diff --git a/src/ovirtcli/shell/engineshell.py
b/src/ovirtcli/shell/engineshell.py
index 138ea52..03480c3 100644
--- a/src/ovirtcli/shell/engineshell.py
+++ b/src/ovirtcli/shell/engineshell.py
@@ -99,8 +99,11 @@
self._error(str(e))
return self.cmdloop(intro, clear=False)
- def print_line(self, line):
- print self.prompt + line
+ def print_line(self, line, no_prompt=False):
+ if no_prompt:
+ print line
+ else:
+ print self.prompt + line
def emptyline(self, no_prompt=False):
if no_prompt:
--
To view, visit http://gerrit.ovirt.org/22090
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibf7bb40e8fe2f933ccbfae75a0e031235b2dc07d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine-cli
Gerrit-Branch: cli_3.3
Gerrit-Owner: Michael Pasternak <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches