From a22ec256bd8dd5586c272606ec0b64004709d6a0 Mon Sep 17 00:00:00 2001 From: Adhityaa C Date: Fri, 9 Dec 2016 22:20:18 +0530 Subject: [PATCH] bearlib: Cache deprecation message Annoying when the same message is logged hundreds of times. Fixes https://github.com/coala/coala/issues/3165 --- coalib/bearlib/__init__.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/coalib/bearlib/__init__.py b/coalib/bearlib/__init__.py index 8e3d3135d0..ac46555435 100644 --- a/coalib/bearlib/__init__.py +++ b/coalib/bearlib/__init__.py @@ -53,10 +53,17 @@ def deprecate_settings(**depr_args): WARNING:root:The setting `old` is deprecated. Please use `new` instead. WARNING:root:The value of `old` and `new` are conflicting. `new` will... coala is always written with lowercase `c`. + >>> @deprecate_settings(new='old') + ... def run(new): + ... print(new) >>> run(old='Hello!', new='Hello!') WARNING:root:The setting `old` is deprecated. Please use `new` instead. Hello! + Note that messages are cached. So the same message won't be printed twice: + >>> run(old='Hello!', new='Hello!') + Hello! + The metadata for coala has been adjusted as well: >>> list(run.__metadata__.non_optional_params.keys()) @@ -72,6 +79,8 @@ def deprecate_settings(**depr_args): """ def _deprecate_decorator(func): + logged_deprecated_args = set() + def wrapping_function(*args, **kwargs): for arg, depr_arg_and_modifier in depr_args.items(): deprecated_arg, _func = ( @@ -79,9 +88,11 @@ def wrapping_function(*args, **kwargs): if isinstance(depr_arg_and_modifier, tuple) else (depr_arg_and_modifier, lambda x: x)) if deprecated_arg in kwargs: - logging.warning( - 'The setting `{}` is deprecated. Please use `{}` ' - 'instead.'.format(deprecated_arg, arg)) + if deprecated_arg not in logged_deprecated_args: + logging.warning( + 'The setting `{}` is deprecated. Please use `{}` ' + 'instead.'.format(deprecated_arg, arg)) + logged_deprecated_args.add(deprecated_arg) depr_arg_value = _func.__call__(kwargs[deprecated_arg]) if arg in kwargs and depr_arg_value != kwargs[arg]: logging.warning(