12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- """
- A module that implements tooling to enable easy warnings about deprecations.
- """
- from __future__ import absolute_import
- import logging
- import warnings
- class PipDeprecationWarning(Warning):
- pass
- class Pending(object):
- pass
- class RemovedInPip10Warning(PipDeprecationWarning):
- pass
- class RemovedInPip11Warning(PipDeprecationWarning, Pending):
- pass
- class Python26DeprecationWarning(PipDeprecationWarning):
- pass
- # 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
- # PipDeprecationWarnings that are Pending still have at least 2
- # versions to go until they are removed so they can just be
- # warnings. Otherwise, they will be removed in the very next
- # version of pip. We want these to be more obvious so we use the
- # ERROR logging level.
- if issubclass(category, Pending):
- logger.warning(log_message)
- else:
- logger.error(log_message)
- else:
- _warnings_showwarning(
- message, category, filename, lineno, file, line,
- )
- def install_warning_logger():
- # Enable our Deprecation Warnings
- warnings.simplefilter("default", PipDeprecationWarning, append=True)
- global _warnings_showwarning
- if _warnings_showwarning is None:
- _warnings_showwarning = warnings.showwarning
- warnings.showwarning = _showwarning
|