Update deprecation utilities to specify versions

Also:
- Remove conditional warning/error level logging
- Remove now-obsolete class
- Update call sites as per new signature
This commit is contained in:
Pradyun Gedam 2018-07-06 04:47:33 +05:30
parent 4c2b268d52
commit e027cd8449
No known key found for this signature in database
GPG Key ID: DA17C4B29CB32E4B
4 changed files with 16 additions and 22 deletions

View File

@ -215,6 +215,7 @@ class PackageFinder(object):
"Dependency Links processing has been deprecated and will be " "Dependency Links processing has been deprecated and will be "
"removed in a future release.", "removed in a future release.",
replacement=None, replacement=None,
gone_in="18.2",
issue=4187, issue=4187,
) )
self.dependency_links.extend(links) self.dependency_links.extend(links)

View File

@ -219,6 +219,7 @@ class FrozenRequirement(object):
"SVN editable detection based on dependency links " "SVN editable detection based on dependency links "
"will be dropped in the future.", "will be dropped in the future.",
replacement=None, replacement=None,
gone_in="18.2",
issue=4187, issue=4187,
) )
comments.append( comments.append(

View File

@ -586,8 +586,8 @@ class InstallRequirement(object):
"pyproject.toml files that do not contain the [build-system]" "pyproject.toml files that do not contain the [build-system]"
"table and the requires key, as specified in PEP 518.", "table and the requires key, as specified in PEP 518.",
replacement=None, replacement=None,
gone_in="18.2",
issue=5416, issue=5416,
imminent=True,
) )
# Currently, we're isolating the build based on the presence of the # Currently, we're isolating the build based on the presence of the

View File

@ -6,6 +6,9 @@ from __future__ import absolute_import
import logging import logging
import warnings import warnings
from pip._vendor.packaging.version import parse
from pip import __version__ as current_version
from pip._internal.utils.typing import MYPY_CHECK_RUNNING from pip._internal.utils.typing import MYPY_CHECK_RUNNING
if MYPY_CHECK_RUNNING: if MYPY_CHECK_RUNNING:
@ -16,10 +19,6 @@ class PipDeprecationWarning(Warning):
pass pass
class PipPendingDeprecationWarning(PipDeprecationWarning):
pass
_original_showwarning = None # type: Any _original_showwarning = None # type: Any
@ -34,16 +33,7 @@ def _showwarning(message, category, filename, lineno, file=None, line=None):
# We use a specially named logger which will handle all of the # We use a specially named logger which will handle all of the
# deprecation messages for pip. # deprecation messages for pip.
logger = logging.getLogger("pip._internal.deprecations") logger = logging.getLogger("pip._internal.deprecations")
logger.warning(message)
# PipPendingDeprecationWarnings 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, PipPendingDeprecationWarning):
logger.warning(log_message)
else:
logger.error(log_message)
else: else:
_original_showwarning( _original_showwarning(
message, category, filename, lineno, file, line, message, category, filename, lineno, file, line,
@ -61,12 +51,11 @@ def install_warning_logger():
warnings.showwarning = _showwarning warnings.showwarning = _showwarning
def deprecated(reason, replacement, issue=None, imminent=False): def deprecated(reason, replacement, gone_in, issue=None):
# type: (str, Optional[str], Optional[int], bool) -> None # type: (str, Optional[str], Optional[str], Optional[int]) -> None
if imminent: """Helper to deprecate existing functionality.
category = PipDeprecationWarning """
else: # NOTE: treat replacement, gone_in, issue as keyword only arguments.
category = PipPendingDeprecationWarning
# Construct a nice message. # Construct a nice message.
# This is purposely eagerly formatted as we want it to appear as if someone # This is purposely eagerly formatted as we want it to appear as if someone
@ -78,4 +67,7 @@ def deprecated(reason, replacement, issue=None, imminent=False):
url = "https://github.com/pypa/pip/issues/" + str(issue) url = "https://github.com/pypa/pip/issues/" + str(issue)
message += " You can find discussion regarding this at {}.".format(url) message += " You can find discussion regarding this at {}.".format(url)
warnings.warn(message, category=category, stacklevel=2) # Raise as an error if it has to be removed.
if gone_in is not None and parse(current_version) >= parse(gone_in):
raise PipDeprecationWarning(message)
warnings.warn(message, category=PipDeprecationWarning, stacklevel=2)