|
- """
- A module that implments tooling to enable easy warnings about deprecations.
- """
- from __future__ import absolute_import
-
- import logging
- import warnings
-
-
- class PipDeprecationWarning(Warning):
- pass
-
-
- class RemovedInPip8Warning(PipDeprecationWarning, PendingDeprecationWarning):
- pass
-
-
- class RemovedInPip9Warning(PipDeprecationWarning, PendingDeprecationWarning):
- pass
-
-
- DEPRECATIONS = [RemovedInPip8Warning, RemovedInPip9Warning]
-
-
- # Warnings <-> Logging Integration
-
-
- _warnings_showwarning = None
-
-
- def _showwarning(message, category, filename, lineno, file=None, line=None):
- if file is not None:
- if _warnings_showwarning is not None:
- _warnings_showwarning(
- message, category, filename, lineno, file, line,
- )
- else:
- if issubclass(category, PipDeprecationWarning):
- # We use a specially named logger which will handle all of the
- # deprecation messages for pip.
- logger = logging.getLogger("pip.deprecations")
-
- # This is purposely using the % formatter here instead of letting
- # the logging module handle the interpolation. This is because we
- # want it to appear as if someone typed this entire message out.
- log_message = "DEPRECATION: %s" % message
-
- # Things that are DeprecationWarnings will be removed in the very
- # next version of pip. We want these to be more obvious so we
- # use the ERROR logging level while the PendingDeprecationWarnings
- # are still have at least 2 versions to go until they are removed
- # so they can just be warnings.
- if issubclass(category, DeprecationWarning):
- logger.error(log_message)
- else:
- logger.warning(log_message)
- else:
- _warnings_showwarning(
- message, category, filename, lineno, file, line,
- )
-
-
- def install_warning_logger():
- global _warnings_showwarning
-
- if _warnings_showwarning is None:
- _warnings_showwarning = warnings.showwarning
- warnings.showwarning = _showwarning
|