Merge "Improve deprecation warnings"
This commit is contained in:
commit
8b967c8a8c
|
@ -14,6 +14,7 @@
|
|||
# under the License.
|
||||
|
||||
import functools
|
||||
import traceback
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import handlers
|
||||
|
@ -223,17 +224,23 @@ def log_deprecated(message, rally_version, log_function=None, once=False):
|
|||
:param once: Show only once (default is each)
|
||||
"""
|
||||
log_function = log_function or LOG.warning
|
||||
msg = ("`%(func)s()' is deprecated in v%(version)s: %(msg)s."
|
||||
" Used at %(caller)s")
|
||||
|
||||
def decorator(f):
|
||||
@functools.wraps(f)
|
||||
def wrapper(*args, **kwargs):
|
||||
if (not once) or (not getattr(f, "_warned_dep_method", False)):
|
||||
log_function("'%(func)s' is deprecated in Rally v%(version)s: "
|
||||
"%(msg)s" % {"msg": message,
|
||||
"version": rally_version,
|
||||
"func": f.__name__})
|
||||
setattr(f, "_warned_dep_method", once)
|
||||
if not (once and getattr(f, "_warned_dep_method", False)):
|
||||
log_function(msg % {
|
||||
"msg": message,
|
||||
"version": rally_version,
|
||||
"func": f.__name__,
|
||||
"caller": str(traceback.extract_stack()[-2])
|
||||
})
|
||||
|
||||
f._warned_dep_method = True
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
@ -249,22 +256,28 @@ def log_deprecated_args(message, rally_version, deprecated_args,
|
|||
:param once: Show only once (default is each)
|
||||
"""
|
||||
log_function = log_function or LOG.warning
|
||||
msg = ("Argument(s): %(args)s of `%(func)s()' are deprecated in "
|
||||
"v%(version)s: %(msg)s. Used at %(caller)s")
|
||||
|
||||
def decorator(f):
|
||||
|
||||
@functools.wraps(f)
|
||||
def wrapper(*args, **kwargs):
|
||||
if (not once) or (not getattr(f, "_warned_dep_args", False)):
|
||||
if not (once and getattr(f, "_warned_dep_args", False)):
|
||||
deprecated = ", ".join([
|
||||
"`%s'" % x for x in deprecated_args if x in kwargs])
|
||||
if deprecated:
|
||||
log_function(
|
||||
"%(msg)s (args %(args)s deprecated in Rally "
|
||||
"v%(version)s)" %
|
||||
{"msg": message, "version": rally_version,
|
||||
"args": deprecated})
|
||||
setattr(f, "_warned_dep_args", once)
|
||||
result = f(*args, **kwargs)
|
||||
return result
|
||||
log_function(msg % {
|
||||
"msg": message,
|
||||
"version": rally_version,
|
||||
"args": deprecated,
|
||||
"func": f.__name__,
|
||||
"caller": str(traceback.extract_stack()[-2])
|
||||
})
|
||||
|
||||
f._warned_dep_args = True
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
|
|
@ -48,40 +48,40 @@ class LogTestCase(test.TestCase):
|
|||
def test_log_deprecated(self):
|
||||
mock_log = mock.MagicMock()
|
||||
|
||||
@logging.log_deprecated("some alternative", "0.0.1", mock_log)
|
||||
@logging.log_deprecated("depr42", "1.1.1", mock_log)
|
||||
def some_method(x, y):
|
||||
return x + y
|
||||
|
||||
self.assertEqual(some_method(2, 2), 4)
|
||||
mock_log.assert_called_once_with("'some_method' is deprecated in "
|
||||
"Rally v0.0.1: some alternative")
|
||||
self.assertIn("some_method()", mock_log.call_args[0][0])
|
||||
self.assertIn("depr42", mock_log.call_args[0][0])
|
||||
self.assertIn("1.1.1", mock_log.call_args[0][0])
|
||||
|
||||
def test_log_deprecated_args(self):
|
||||
mock_log = mock.MagicMock()
|
||||
|
||||
@logging.log_deprecated_args("Deprecated test", "0.0.1", ("z",),
|
||||
@logging.log_deprecated_args("ABC42", "0.0.1", ("z",),
|
||||
mock_log, once=True)
|
||||
def some_method(x, y, z):
|
||||
return x + y + z
|
||||
|
||||
self.assertEqual(some_method(2, 2, z=3), 7)
|
||||
mock_log.assert_called_once_with(
|
||||
"Deprecated test (args `z' deprecated in Rally v0.0.1)")
|
||||
self.assertIn("ABC42", mock_log.call_args[0][0])
|
||||
self.assertIn("`z' of `some_method()'", mock_log.call_args[0][0])
|
||||
self.assertIn("0.0.1", mock_log.call_args[0][0])
|
||||
|
||||
mock_log.reset_mock()
|
||||
self.assertEqual(some_method(2, 2, z=3), 7)
|
||||
self.assertFalse(mock_log.called)
|
||||
|
||||
@logging.log_deprecated_args("Deprecated test", "0.0.1", ("z",),
|
||||
@logging.log_deprecated_args("CBA42", "0.0.1", ("z",),
|
||||
mock_log, once=False)
|
||||
def some_method(x, y, z):
|
||||
return x + y + z
|
||||
|
||||
self.assertEqual(some_method(2, 2, z=3), 7)
|
||||
mock_log.assert_called_once_with(
|
||||
"Deprecated test (args `z' deprecated in Rally v0.0.1)")
|
||||
self.assertIn("CBA42", mock_log.call_args[0][0])
|
||||
|
||||
mock_log.reset_mock()
|
||||
self.assertEqual(some_method(2, 2, z=3), 7)
|
||||
mock_log.assert_called_once_with(
|
||||
"Deprecated test (args `z' deprecated in Rally v0.0.1)")
|
||||
self.assertIn("CBA42", mock_log.call_args[0][0])
|
||||
|
|
Loading…
Reference in New Issue