Merge "remove failing influx testcases"
[yardstick.git] / yardstick / cmd / cli.py
index dd74836..05bf8f0 100644 (file)
@@ -11,6 +11,7 @@
 Command-line interface to yardstick
 '''
 
+from __future__ import absolute_import
 import logging
 import os
 import sys
@@ -19,11 +20,13 @@ from pkg_resources import get_distribution
 from argparse import RawDescriptionHelpFormatter
 from oslo_config import cfg
 
+from yardstick import _init_logging, LOG
 from yardstick.cmd.commands import task
 from yardstick.cmd.commands import runner
 from yardstick.cmd.commands import scenario
 from yardstick.cmd.commands import testcase
 from yardstick.cmd.commands import plugin
+from yardstick.cmd.commands import env
 
 CONF = cfg.CONF
 cli_opts = [
@@ -62,10 +65,12 @@ class YardstickCLI():
         'runner': runner.RunnerCommands,
         'scenario': scenario.ScenarioCommands,
         'testcase': testcase.TestcaseCommands,
-        'plugin': plugin.PluginCommands
+        'plugin': plugin.PluginCommands,
+        'env': env.EnvCommand
     }
 
     def __init__(self):
+        self.opts = []
         self._version = 'yardstick version %s ' % \
             get_distribution('yardstick').version
 
@@ -101,8 +106,7 @@ class YardstickCLI():
             cmd_subparsers = subparser.add_subparsers(title='subcommands')
             self._find_actions(cmd_subparsers, command_object)
 
-    def main(self, argv):
-        '''run the command line interface'''
+    def _register_cli_opt(self):
 
         # register subcommands to parse additional command line arguments
         def parser(subparsers):
@@ -112,22 +116,67 @@ class YardstickCLI():
                                          title="Command categories",
                                          help="Available categories",
                                          handler=parser)
-        CONF.register_cli_opt(category_opt)
+        self._register_opt(category_opt)
+
+    def _register_opt(self, opt):
+
+        CONF.register_cli_opt(opt)
+        self.opts.append(opt)
+
+    def _load_cli_config(self, argv):
 
         # load CLI args and config files
         CONF(argv, project="yardstick", version=self._version,
              default_config_files=find_config_files(CONFIG_SEARCH_PATHS))
 
-        # handle global opts
-        logger = logging.getLogger('yardstick')
-        logger.setLevel(logging.WARNING)
+    def _handle_global_opts(self):
 
+        _init_logging()
         if CONF.verbose:
-            logger.setLevel(logging.INFO)
+            LOG.setLevel(logging.INFO)
 
         if CONF.debug:
-            logger.setLevel(logging.DEBUG)
+            LOG.setLevel(logging.DEBUG)
+
+    def _dispath_func_notask(self):
 
         # dispatch to category parser
         func = CONF.category.func
         func(CONF.category)
+
+    def _dispath_func_task(self, task_id):
+
+        # dispatch to category parser
+        func = CONF.category.func
+        func(CONF.category, task_id=task_id)
+
+    def _clear_config_opts(self):
+
+        CONF.clear()
+        CONF.unregister_opts(self.opts)
+
+    def main(self, argv):    # pragma: no cover
+        '''run the command line interface'''
+        try:
+            self._register_cli_opt()
+
+            self._load_cli_config(argv)
+
+            self._handle_global_opts()
+
+            self._dispath_func_notask()
+        finally:
+            self._clear_config_opts()
+
+    def api(self, argv, task_id):    # pragma: no cover
+        '''run the api interface'''
+        try:
+            self._register_cli_opt()
+
+            self._load_cli_config(argv)
+
+            self._handle_global_opts()
+
+            self._dispath_func_task(task_id)
+        finally:
+            self._clear_config_opts()