deprecation library provides a
deprecated decorator and a
fail_if_not_removed decorator for your tests. Together, the two
enable the automation of several things:
- The docstring of a deprecated method gets the deprecation details appended to the end of it. If you generate your API docs direct from your source, you don't need to worry about writing your own notification. You also don't need to worry about forgetting to write it. It's done for you.
- Rather than having code live on forever because you only deprecated
it but never actually moved on from it, you can have your tests
tell you when it's time to remove the code. The
@deprecateddecorator can be told when it's time to entirely remove the code, which causes
@fail_if_not_removedto raise an
AssertionError, causing either your unittest or py.test tests to fail.
See http://deprecation.readthedocs.io/ for the full documentation.
pip install deprecation
import deprecation @deprecation.deprecated(deprecated_in="1.0", removed_in="2.0", current_version=__version__, details="Use the bar function instead") def foo(): """Do some stuff""" return 1
...but doesn't Python ignore
Yes, by default since 2.7—and for good reason  —and this works fine with that.
- It often makes sense for you to run your tests with a
-Wflag or the
PYTHONWARNINGSenvironment variable so you catch warnings in development and handle them appropriately. The warnings raised by this library show up there, as they're subclasses of the built-in
DeprecationWarning. See the Command Line and Environment Variable documentation for more details.
- Even if you don't enable those things, the behavior of this library
remains the same. The docstrings will still be updated and the tests
will still fail when they need to. You'll get the benefits regardless
of what Python cares about
|||Exposing application users to |