diff options
Diffstat (limited to 'openstackclient/common')
| -rw-r--r-- | openstackclient/common/command.py | 42 | ||||
| -rw-r--r-- | openstackclient/common/utils.py | 22 |
2 files changed, 55 insertions, 9 deletions
diff --git a/openstackclient/common/command.py b/openstackclient/common/command.py new file mode 100644 index 00000000..b8d9fc6f --- /dev/null +++ b/openstackclient/common/command.py @@ -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 diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py index 096c995b..3ae30c8f 100644 --- a/openstackclient/common/utils.py +++ b/openstackclient/common/utils.py @@ -26,28 +26,32 @@ from oslo_utils import importutils from openstackclient.common import exceptions -def log_method(log, level=logging.DEBUG): - """Logs a method and its arguments when entered.""" +class log_method(object): - def decorator(func): + def __init__(self, log=None, level=logging.DEBUG): + self._log = log + self._level = level + + def __call__(self, func): func_name = func.__name__ + if not self._log: + self._log = logging.getLogger(func.__class__.__name__) @six.wraps(func) - def wrapper(self, *args, **kwargs): - if log.isEnabledFor(level): + def wrapper(*args, **kwargs): + if self._log.isEnabledFor(self._level): pretty_args = [] if args: pretty_args.extend(str(a) for a in args) if kwargs: pretty_args.extend( "%s=%s" % (k, v) for k, v in six.iteritems(kwargs)) - log.log(level, "%s(%s)", func_name, ", ".join(pretty_args)) - return func(self, *args, **kwargs) + self._log.log(self._level, "%s(%s)", + func_name, ", ".join(pretty_args)) + return func(*args, **kwargs) return wrapper - return decorator - def find_resource(manager, name_or_id, **kwargs): """Helper for the _find_* methods. |
