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:
Akihiro Motoki 2016-01-09 13:35:30 +09:00
parent 5dbca5f56a
commit 0e6b86ad94
3 changed files with 80 additions and 22 deletions

View 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

View File

@ -15,22 +15,16 @@
"""Flavor action implementations"""
import logging
import six
from cliff import command
from cliff import lister
from cliff import show
from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
class CreateFlavor(show.ShowOne):
class CreateFlavor(command.ShowOne):
"""Create new flavor"""
log = logging.getLogger(__name__ + ".CreateFlavor")
def get_parser(self, prog_name):
parser = super(CreateFlavor, self).get_parser(prog_name)
parser.add_argument(
@ -128,8 +122,6 @@ class CreateFlavor(show.ShowOne):
class DeleteFlavor(command.Command):
"""Delete flavor"""
log = logging.getLogger(__name__ + ".DeleteFlavor")
def get_parser(self, prog_name):
parser = super(DeleteFlavor, self).get_parser(prog_name)
parser.add_argument(
@ -147,11 +139,9 @@ class DeleteFlavor(command.Command):
compute_client.flavors.delete(flavor.id)
class ListFlavor(lister.Lister):
class ListFlavor(command.Lister):
"""List flavors"""
log = logging.getLogger(__name__ + ".ListFlavor")
def get_parser(self, prog_name):
parser = super(ListFlavor, self).get_parser(prog_name)
public_group = parser.add_mutually_exclusive_group()
@ -231,11 +221,9 @@ class ListFlavor(lister.Lister):
) for s in data))
class ShowFlavor(show.ShowOne):
class ShowFlavor(command.ShowOne):
"""Display flavor details"""
log = logging.getLogger(__name__ + ".ShowFlavor")
def get_parser(self, prog_name):
parser = super(ShowFlavor, self).get_parser(prog_name)
parser.add_argument(
@ -258,11 +246,9 @@ class ShowFlavor(show.ShowOne):
return zip(*sorted(six.iteritems(flavor)))
class SetFlavor(show.ShowOne):
class SetFlavor(command.ShowOne):
"""Set flavor properties"""
log = logging.getLogger(__name__ + ".SetFlavor")
def get_parser(self, prog_name):
parser = super(SetFlavor, self).get_parser(prog_name)
parser.add_argument(
@ -292,11 +278,9 @@ class SetFlavor(show.ShowOne):
return zip(*sorted(six.iteritems(flavor)))
class UnsetFlavor(show.ShowOne):
class UnsetFlavor(command.ShowOne):
"""Unset flavor properties"""
log = logging.getLogger(__name__ + ".UnsetFlavor")
def get_parser(self, prog_name):
parser = super(UnsetFlavor, self).get_parser(prog_name)
parser.add_argument(

View 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)