* [spp] [PATCH] cli: add config option
@ 2019-08-06 7:29 yasufum.o
0 siblings, 0 replies; only message in thread
From: yasufum.o @ 2019-08-06 7:29 UTC (permalink / raw)
To: spp, ferruh.yigit, yasufum.o
From: Yasufumi Ogawa <yasufum.o@gmail.com>
SPP CLI has a default config file as `src/cli/config/defautl.yml`. It
might be customized and rename other than default. This update is to add
`--config` option for loading customized config instead of default one.
$ python3 src/spp.py --config /path/to/your/config.yml
Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
---
src/cli/shell.py | 79 +++++++++++++++++++++++++-----------------------
src/cli/spp.py | 5 ++-
2 files changed, 46 insertions(+), 38 deletions(-)
diff --git a/src/cli/shell.py b/src/cli/shell.py
index 2288e1d..989f071 100644
--- a/src/cli/shell.py
+++ b/src/cli/shell.py
@@ -24,39 +24,44 @@ import yaml
class Shell(cmd.Cmd, object):
"""SPP command prompt."""
- # Load default config, can be changed via `config` command
- # TODO(yasufum) enable to give config file from option
- try:
- config_file = "{}/config/default.yml".format(
- os.path.dirname(__file__))
- cli_config = yaml.load(open(config_file),
- Loader=yaml.FullLoader)
- except IOError as e:
- print('Error: no config file found!')
- print(e)
- exit()
-
- hist_file = os.path.expanduser('~/.spp_history')
- PLUGIN_DIR = 'plugins'
-
- # Commands not included in history
- HIST_EXCEPT = ['bye', 'exit', 'history', 'redo']
-
- # Shell settings which are reserved vars of Cmd class.
- # `intro` is to be shown as a welcome message.
- intro = 'Welcome to the SPP CLI. Type `help` or `?` to list commands.\n'
- prompt = cli_config['prompt']['val'] # command prompt
-
- # Recipe file to be recorded with `record` command
- recorded_file = None
-
- # setup history file
- if os.path.exists(hist_file):
- readline.read_history_file(hist_file)
- else:
- readline.write_history_file(hist_file)
-
- def __init__(self, spp_cli_objs, use_cache=False):
+ def __init__(self, spp_cli_objs, config, use_cache=False):
+
+ # Load default config, can be changed via `config` command
+ try:
+ if config is not None:
+ config_path = "{}/{}".format(
+ os.getcwd(), config)
+ else:
+ config_path = "{}/config/default.yml".format(
+ os.path.dirname(__file__))
+
+ self.cli_config = yaml.load(open(config_path),
+ Loader=yaml.FullLoader)
+ except IOError as e:
+ print('Error: No config file found!')
+ print(e)
+ exit()
+
+ self.hist_file = os.path.expanduser('~/.spp_history')
+ self.plugin_dir = 'plugins'
+
+ # Commands not included in history
+ self.hist_except = ['bye', 'exit', 'history', 'redo']
+
+ # Shell settings which are reserved vars of Cmd class.
+ # `intro` is to be shown as a welcome message.
+ self.intro = 'Welcome to the SPP CLI. Type `help` or `?` to list commands.\n'
+ self.prompt = self.cli_config['prompt']['val'] # command prompt
+
+ # Recipe file to be recorded with `record` command
+ self.recorded_file = None
+
+ # setup history file
+ if os.path.exists(self.hist_file):
+ readline.read_history_file(self.hist_file)
+ else:
+ readline.write_history_file(self.hist_file)
+
cmd.Cmd.__init__(self)
self.spp_ctl_server = server.SppCtlServer(spp_cli_objs)
self.spp_ctl_cli = spp_cli_objs[0]
@@ -107,7 +112,7 @@ class Shell(cmd.Cmd, object):
self.init_spp_procs()
# TODO(yasufum) do not add to history if command is failed.
- if line.strip().split(' ')[0] not in self.HIST_EXCEPT:
+ if line.strip().split(' ')[0] not in self.hist_except:
readline.write_history_file(self.hist_file)
return stop
@@ -917,7 +922,7 @@ class Shell(cmd.Cmd, object):
args = re.sub(r'\s+', ' ', args)
list_args = args.split(' ')
- libdir = self.PLUGIN_DIR
+ libdir = self.plugin_dir
mod_name = list_args[0]
method_name = 'do_%s' % mod_name
exec('from .%s import %s' % (libdir, mod_name))
@@ -933,7 +938,7 @@ class Shell(cmd.Cmd, object):
def complete_load_cmd(self, text, line, begidx, endidx):
"""Complete command plugins
- Search under PLUGIN_DIR with compl_common() method.
+ Search under `plugin_dir` with compl_common() method.
This method is intended to be used for searching current
directory, but not in this case. If text is not '',
compl_common() does not work correctly and do filtering
@@ -942,7 +947,7 @@ class Shell(cmd.Cmd, object):
curdir = os.path.dirname(__file__)
res = common.compl_common(
- '', '%s/%s' % (curdir, self.PLUGIN_DIR), 'py')
+ '', '%s/%s' % (curdir, self.plugin_dir), 'py')
completions = []
for t in res:
diff --git a/src/cli/spp.py b/src/cli/spp.py
index 00ffd6f..8cf31eb 100644
--- a/src/cli/spp.py
+++ b/src/cli/spp.py
@@ -3,6 +3,7 @@
# Copyright(c) 2015-2016 Intel Corporation
import argparse
+import os
import re
from .shell import Shell
from .shell_lib import common
@@ -20,6 +21,8 @@ def main(argv):
parser.add_argument('-b', '--bind-addr', action='append',
default=['%s:%s' % (api_ipaddr, api_port)],
help='bind address, default=127.0.0.1:7777')
+ parser.add_argument('--config', type=str,
+ help='Config file path')
args = parser.parse_args()
if len(args.bind_addr) > 1:
@@ -48,7 +51,7 @@ def main(argv):
spp_cli_objs.append(spp_ctl_cli)
- shell = Shell(spp_cli_objs)
+ shell = Shell(spp_cli_objs, args.config)
shell.cmdloop()
shell = None
--
2.17.1
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-08-06 7:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-06 7:29 [spp] [PATCH] cli: add config option yasufum.o
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).