[spp] [PATCH 08/12] spp: add completion for playback command
ogawa.yasufumi at lab.ntt.co.jp
ogawa.yasufumi at lab.ntt.co.jp
Tue Mar 6 11:39:25 CET 2018
From: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
src/spp.py | 107 +++++++++++++++++++++++++++++++------------------------------
1 file changed, 55 insertions(+), 52 deletions(-)
diff --git a/src/spp.py b/src/spp.py
index db43ad5..552e921 100755
--- a/src/spp.py
+++ b/src/spp.py
@@ -368,6 +368,58 @@ class Shell(cmd.Cmd, object):
SEC_SUBCMDS = ['vhost', 'ring', 'pcap', 'nullpmd']
BYE_CMDS = ['sec', 'all']
+ def decorate_dir(self, curdir, filelist):
+ res = []
+ for f in filelist:
+ if os.path.isdir('%s/%s' % (curdir, f)):
+ res.append('%s/' % f)
+ else:
+ res.append(f)
+ return res
+
+ def compl_common(self, text, line, ftype=None):
+ if text == '':
+ tokens = line.split(' ')
+ target_dir = tokens[-1]
+ if target_dir == '':
+ res = self.decorate_dir(
+ '.', os.listdir(os.getcwd()))
+ else:
+ res = self.decorate_dir(
+ target_dir, os.listdir(target_dir))
+ else:
+ tokens = line.split(' ')
+ target = tokens[-1]
+
+ if '/' in target:
+ seg = target.split('/')[-1]
+ target_dir = '/'.join(target.split('/')[0:-1])
+ else:
+ seg = text
+ target_dir = os.getcwd()
+
+ matched = []
+ for t in os.listdir(target_dir):
+ if t.find(seg) == 0:
+ matched.append(t)
+ res = self.decorate_dir(target_dir, matched)
+
+ if ftype is not None:
+ completions = []
+ if ftype == 'directory':
+ for fn in res:
+ if fn[-1] == '/':
+ completions.append(fn)
+ elif ftype == 'file':
+ for fn in res:
+ if fn[-1] != '/':
+ completions.append(fn)
+ else:
+ completions = res
+ else:
+ completions = res
+ return completions
+
def is_comment_line(self, line):
input_line = line.strip()
if len(input_line) > 0:
@@ -648,6 +700,9 @@ class Shell(cmd.Cmd, object):
self.recorded_file = open(fname, 'w')
self.response(self.CMD_OK, "record")
+ def complete_playback(self, text, line, begidx, endidx):
+ return self.compl_common(text, line)
+
def do_playback(self, fname):
"""Playback commands from a file: PLAYBACK filename.cmd"""
@@ -689,58 +744,6 @@ class Shell(cmd.Cmd, object):
def do_pwd(self, args):
print(os.getcwd())
- def decorate_dir(self, curdir, filelist):
- res = []
- for f in filelist:
- if os.path.isdir('%s/%s' % (curdir, f)):
- res.append('%s/' % f)
- else:
- res.append(f)
- return res
-
- def compl_common(self, text, line, ftype=None):
- if text == '':
- tokens = line.split(' ')
- target_dir = tokens[-1]
- if target_dir == '':
- res = self.decorate_dir(
- '.', os.listdir(os.getcwd()))
- else:
- res = self.decorate_dir(
- target_dir, os.listdir(target_dir))
- else:
- tokens = line.split(' ')
- target = tokens[-1]
-
- if '/' in target:
- seg = target.split('/')[-1]
- target_dir = '/'.join(target.split('/')[0:-1])
- else:
- seg = text
- target_dir = os.getcwd()
-
- matched = []
- for t in os.listdir(target_dir):
- if t.find(seg) == 0:
- matched.append(t)
- res = self.decorate_dir(target_dir, matched)
-
- if ftype is not None:
- if ftype == 'directory':
- completions = []
- for fn in res:
- if fn[-1] == '/':
- completions.append(fn)
- elif ftype == 'file':
- for fn in res:
- if fn[-1] != '/':
- completions.append(fn)
- else:
- completions = res
- else:
- completions = res
- return completions
-
def complete_ls(self, text, line, begidx, endidx):
return self.compl_common(text, line)
--
2.13.1
More information about the spp
mailing list