Set up logger of each command by metaclass
compute.v2.flavor is changed in this commit as an initial example. Partial-Bug: #1532294 Change-Id: I262af6ade0ae03fbe1cd2ad198faf4ebb4ecf7ce
This commit is contained in:
		
							
								
								
									
										42
									
								
								openstackclient/common/command.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								openstackclient/common/command.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| #   Copyright 2016 NEC Corporation | ||||
| # | ||||
| #   Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #   not use this file except in compliance with the License. You may obtain | ||||
| #   a copy of the License at | ||||
| # | ||||
| #        http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #   Unless required by applicable law or agreed to in writing, software | ||||
| #   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #   License for the specific language governing permissions and limitations | ||||
| #   under the License. | ||||
|  | ||||
| import abc | ||||
| import logging | ||||
|  | ||||
| from cliff import command | ||||
| from cliff import lister | ||||
| from cliff import show | ||||
| import six | ||||
|  | ||||
|  | ||||
| class CommandMeta(abc.ABCMeta): | ||||
|     def __new__(mcs, name, bases, cls_dict): | ||||
|         if 'log' not in cls_dict: | ||||
|             cls_dict['log'] = logging.getLogger( | ||||
|                 cls_dict['__module__'] + '.' + name) | ||||
|         return super(CommandMeta, mcs).__new__(mcs, name, bases, cls_dict) | ||||
|  | ||||
|  | ||||
| @six.add_metaclass(CommandMeta) | ||||
| class Command(command.Command): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class Lister(Command, lister.Lister): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class ShowOne(Command, show.ShowOne): | ||||
|     pass | ||||
							
								
								
									
										32
									
								
								openstackclient/tests/common/test_command.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								openstackclient/tests/common/test_command.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| #   Copyright 2016 NEC Corporation | ||||
| # | ||||
| #   Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #   not use this file except in compliance with the License. You may obtain | ||||
| #   a copy of the License at | ||||
| # | ||||
| #        http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #   Unless required by applicable law or agreed to in writing, software | ||||
| #   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #   License for the specific language governing permissions and limitations | ||||
| #   under the License. | ||||
|  | ||||
| import mock | ||||
|  | ||||
| from openstackclient.common import command | ||||
| from openstackclient.tests import utils as test_utils | ||||
|  | ||||
|  | ||||
| class FakeCommand(command.Command): | ||||
|     def take_action(self, parsed_args): | ||||
|         pass | ||||
|  | ||||
|  | ||||
| class TestCommand(test_utils.TestCase): | ||||
|  | ||||
|     def test_command_has_logger(self): | ||||
|         cmd = FakeCommand(mock.Mock(), mock.Mock()) | ||||
|         self.assertTrue(hasattr(cmd, 'log')) | ||||
|         self.assertEqual('openstackclient.tests.common.test_command.' | ||||
|                          'FakeCommand', cmd.log.name) | ||||
		Reference in New Issue
	
	Block a user
	 Akihiro Motoki
					Akihiro Motoki