From ca9965c3282d028da52ec465d5024f16fb54ba04 Mon Sep 17 00:00:00 2001
From: TerryHowe <terrylhowe@gmail.com>
Date: Sun, 9 Aug 2015 07:01:18 -0600
Subject: [PATCH] Move options to log level out of shell.py

Move the conversion of command line options to log level out
of shell.py.

Change-Id: I86cb45a85cd63927aa1c87c1eed27542981df659
Implements: blueprint logging-migration
---
 openstackclient/common/context.py            | 16 ++++++++++++++++
 openstackclient/shell.py                     | 13 +------------
 openstackclient/tests/common/test_context.py | 11 +++++++++++
 3 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/openstackclient/common/context.py b/openstackclient/common/context.py
index 348c5509bd..70c8594398 100644
--- a/openstackclient/common/context.py
+++ b/openstackclient/common/context.py
@@ -22,6 +22,22 @@ _LOG_MESSAGE_FORMAT = ('%(asctime)s.%(msecs)03d %(process)d '
 _LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
 
 
+def log_level_from_options(options):
+    # if --debug, --quiet or --verbose is not specified,
+    # the default logging level is warning
+    log_level = logging.WARNING
+    if options.verbose_level == 0:
+        # --quiet
+        log_level = logging.ERROR
+    elif options.verbose_level == 2:
+        # One --verbose
+        log_level = logging.INFO
+    elif options.verbose_level >= 3:
+        # Two or more --verbose
+        log_level = logging.DEBUG
+    return log_level
+
+
 def set_warning_filter(log_level):
     if log_level == logging.ERROR:
         warnings.simplefilter("ignore")
diff --git a/openstackclient/shell.py b/openstackclient/shell.py
index 58eb9f5468..6ba19d194f 100644
--- a/openstackclient/shell.py
+++ b/openstackclient/shell.py
@@ -113,18 +113,7 @@ class OpenStackShell(app.App):
         super(OpenStackShell, self).configure_logging()
 
         # Set logging to the requested level
-        if self.options.verbose_level == 0:
-            # --quiet
-            log_level = logging.ERROR
-        elif self.options.verbose_level == 1:
-            # This is the default case, no --debug, --verbose or --quiet
-            log_level = logging.WARNING
-        elif self.options.verbose_level == 2:
-            # One --verbose
-            log_level = logging.INFO
-        elif self.options.verbose_level >= 3:
-            # Two or more --verbose
-            log_level = logging.DEBUG
+        log_level = context.log_level_from_options(self.options)
         context.set_warning_filter(log_level)
 
         # Set the handler logging level of FileHandler(--log-file)
diff --git a/openstackclient/tests/common/test_context.py b/openstackclient/tests/common/test_context.py
index 8e1bcf8381..63c2420516 100644
--- a/openstackclient/tests/common/test_context.py
+++ b/openstackclient/tests/common/test_context.py
@@ -62,6 +62,17 @@ class TestContext(utils.TestCase):
         context.setup_logging(shell, cloud_config)
         self.assertEqual(True, shell.enable_operation_logging)
 
+    def test_log_level_from_options(self):
+        opts = mock.Mock()
+        opts.verbose_level = 0
+        self.assertEqual(logging.ERROR, context.log_level_from_options(opts))
+        opts.verbose_level = 1
+        self.assertEqual(logging.WARNING, context.log_level_from_options(opts))
+        opts.verbose_level = 2
+        self.assertEqual(logging.INFO, context.log_level_from_options(opts))
+        opts.verbose_level = 3
+        self.assertEqual(logging.DEBUG, context.log_level_from_options(opts))
+
     @mock.patch('warnings.simplefilter')
     def test_set_warning_filter(self, simplefilter):
         context.set_warning_filter(logging.ERROR)