diff --git a/deprecated/classic.py b/deprecated/classic.py index f3f67d6..1087271 100644 --- a/deprecated/classic.py +++ b/deprecated/classic.py @@ -161,9 +161,11 @@ def __call__(self, wrapped): def wrapped_cls(cls, *args, **kwargs): msg = self.get_deprecated_msg(wrapped, None) - with warnings.catch_warnings(): - if self.action: + if self.action: + with warnings.catch_warnings(): warnings.simplefilter(self.action, self.category) + warnings.warn(msg, category=self.category, stacklevel=_class_stacklevel) + else: warnings.warn(msg, category=self.category, stacklevel=_class_stacklevel) if old_new1 is object.__new__: return old_new1(cls) @@ -274,9 +276,11 @@ def some_old_function(x, y): @wrapt.decorator(adapter=adapter) def wrapper_function(wrapped_, instance_, args_, kwargs_): msg = adapter.get_deprecated_msg(wrapped_, instance_) - with warnings.catch_warnings(): - if action: + if action: + with warnings.catch_warnings(): warnings.simplefilter(action, category) + warnings.warn(msg, category=category, stacklevel=_routine_stacklevel) + else: warnings.warn(msg, category=category, stacklevel=_routine_stacklevel) return wrapped_(*args_, **kwargs_) diff --git a/tests/test_deprecated.py b/tests/test_deprecated.py index 509abfd..3796640 100644 --- a/tests/test_deprecated.py +++ b/tests/test_deprecated.py @@ -248,8 +248,9 @@ def test_respect_global_filter(): def fun(): print("fun") - warnings.simplefilter("ignore", category=DeprecationWarning) + warnings.simplefilter("once", category=DeprecationWarning) with warnings.catch_warnings(record=True) as warns: fun() - assert len(warns) == 0 + fun() + assert len(warns) == 1 diff --git a/tests/test_deprecated_class.py b/tests/test_deprecated_class.py index 6734800..d585dcd 100644 --- a/tests/test_deprecated_class.py +++ b/tests/test_deprecated_class.py @@ -106,6 +106,19 @@ class MySubClass(MyBaseClass): assert issubclass(MySubClass, MyBaseClass) +def test_class_respect_global_filter(): + @deprecated.classic.deprecated + class MyBaseClass(object): + pass + + with warnings.catch_warnings(record=True) as warns: + warnings.simplefilter("once") + obj = MyBaseClass() + obj = MyBaseClass() + + assert len(warns) == 1 + + def test_subclass_deprecation_using_deprecated_decorator(): @deprecated.classic.deprecated class MyBaseClass(object):