Skip to content

Commit

Permalink
Vendor latest requirementslib and pip-shims (#5156)
Browse files Browse the repository at this point in the history
* Vendor in latest pip-shims==0.7.1

* Vendor in latest pip-shims 0.7.2

* Vendor in latest requirementslib 1.6.6
  • Loading branch information
matteius authored Jun 30, 2022
1 parent 2f6a04b commit 4b977e4
Show file tree
Hide file tree
Showing 9 changed files with 256 additions and 84 deletions.
2 changes: 1 addition & 1 deletion pipenv/vendor/pip_shims/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

from . import shims

__version__ = "0.7.0"
__version__ = "0.7.2"


if "pip_shims" in sys.modules:
Expand Down
81 changes: 52 additions & 29 deletions pipenv/vendor/pip_shims/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
Union,
)

from pipenv.patched.notpip._vendor.requests import Session
from requests import Session

from .utils import TShim, TShimmedFunc, TShimmedPath

Expand Down Expand Up @@ -303,24 +303,29 @@ def temp_environ():


@contextlib.contextmanager
def get_requirement_tracker(req_tracker_creator=None):
# type: (Optional[Callable]) -> Generator[Optional[TReqTracker], None, None]
root = os.environ.get("PIP_REQ_TRACKER")
if not req_tracker_creator:
def get_tracker(tracker_creator=None, tracker_type="REQ"):
# type: (Optional[Callable]) -> Generator[Optional[TReqTracker, TBuildTracker], None, None]
env_var = "PIP_REQ_TRACKER"
prefix = "req-tracker"
if tracker_type == "BUILD": # Replaced the req tracker in pip>=22.1
env_var = "PIP_BUILD_TRACKER"
prefix = "build-tracker"
root = os.environ.get(env_var)
if not tracker_creator:
yield None
else:
req_tracker_args = []
_, required_args = get_method_args(req_tracker_creator.__init__) # type: ignore
_, required_args = get_method_args(tracker_creator.__init__) # type: ignore
with ExitStack() as ctx:
if root is None:
root = ctx.enter_context(TemporaryDirectory(prefix="req-tracker"))
root = ctx.enter_context(TemporaryDirectory(prefix=prefix))
if root:
root = str(root)
ctx.enter_context(temp_environ())
os.environ["PIP_REQ_TRACKER"] = root
os.environ[env_var] = root
if required_args is not None and "root" in required_args:
req_tracker_args.append(root)
with req_tracker_creator(*req_tracker_args) as tracker:
with tracker_creator(*req_tracker_args) as tracker:
yield tracker


Expand Down Expand Up @@ -804,6 +809,7 @@ def _ensure_finder(
@contextlib.contextmanager
def make_preparer(
preparer_fn, # type: TShimmedFunc
build_tracker_fn=None, # type: Optional[TShimmedFunc]
req_tracker_fn=None, # type: Optional[TShimmedFunc]
build_dir=None, # type: Optional[str]
src_dir=None, # type: Optional[str]
Expand All @@ -823,6 +829,7 @@ def make_preparer(
install_cmd=None, # type: Optional[TCommandInstance]
finder_provider=None, # type: Optional[TShimmedFunc]
verbosity=0, # type: Optional[int]
check_build_deps=False, # type: Optional[bool]
):
# (...) -> ContextManager
"""
Expand Down Expand Up @@ -890,6 +897,8 @@ def make_preparer(
required_args, required_kwargs = get_allowed_args(preparer_fn) # type: ignore
if not req_tracker and not req_tracker_fn and "req_tracker" in required_args:
raise TypeError("No requirement tracker and no req tracker generator found!")
if not build_tracker and not build_tracker_fn and "build_tracker" in required_args:
raise TypeError("No build tracker and no build tracker generator found!")
if "downloader" in required_args and not downloader_provider:
raise TypeError("no downloader provided, but one is required to continue!")
pip_options_created = options is None
Expand Down Expand Up @@ -934,19 +943,27 @@ def make_preparer(
preparer_args["in_tree_build"] = True
if "verbosity" in required_args:
preparer_args["verbosity"] = verbosity
req_tracker_fn = resolve_possible_shim(req_tracker_fn)
req_tracker_fn = nullcontext if not req_tracker_fn else req_tracker_fn
with req_tracker_fn() as tracker_ctx:
if "req_tracker" in required_args:
if "check_build_deps" in required_args:
preparer_args["check_build_deps"] = check_build_deps

if "build_tracker" in required_args:
build_tracker_fn = resolve_possible_shim(build_tracker_fn)
build_tracker_fn = nullcontext if not build_tracker_fn else build_tracker_fn
with build_tracker_fn() as tracker_ctx:
build_tracker = tracker_ctx if build_tracker is None else build_tracker
preparer_args["build_tracker"] = build_tracker
preparer_args["lazy_wheel"] = True
result = call_function_with_correct_args(preparer_fn, **preparer_args)
yield result
if "req_tracker" in required_args:
req_tracker_fn = resolve_possible_shim(req_tracker_fn)
req_tracker_fn = nullcontext if not req_tracker_fn else req_tracker_fn
with req_tracker_fn() as tracker_ctx:
req_tracker = tracker_ctx if req_tracker is None else req_tracker
preparer_args["req_tracker"] = req_tracker
if "build_tracker" in required_args:
req_tracker = tracker_ctx if req_tracker is None else req_tracker
build_tracker = req_tracker if build_tracker is None else build_tracker
preparer_args["build_tracker"] = build_tracker
preparer_args["lazy_wheel"] = True
result = call_function_with_correct_args(preparer_fn, **preparer_args)
yield result
preparer_args["lazy_wheel"] = True
result = call_function_with_correct_args(preparer_fn, **preparer_args)
yield result


@contextlib.contextmanager
Expand Down Expand Up @@ -1351,14 +1368,6 @@ def resolve( # noqa:C901
wheel_download_dir=wheel_download_dir,
**kwargs,
) # type: ignore
if getattr(reqset, "prepare_files", None):
reqset.add_requirement(ireq)
results = reqset.prepare_files(finder)
result = reqset.requirements
reqset.cleanup_files()
return result
if make_preparer_provider is None:
raise TypeError("Cannot create requirement preparer, cannot resolve!")

preparer_args = {
"build_dir": kwargs["build_dir"],
Expand Down Expand Up @@ -1401,12 +1410,26 @@ def resolve( # noqa:C901
_, required_resolver_args = get_method_args(resolver.resolve)
resolver_args = []
if "requirement_set" in required_resolver_args.args:
reqset.add_requirement(ireq)
if hasattr(reqset, "add_requirement"):
reqset.add_requirement(ireq)
else: # Pip >= 22.1.0
resolver._add_requirement_to_set(reqset, ireq)
resolver_args.append(reqset)
elif "root_reqs" in required_resolver_args.args:
resolver_args.append([ireq])
if "check_supported_wheels" in required_resolver_args.args:
resolver_args.append(check_supported_wheels)
if getattr(reqset, "prepare_files", None):
if hasattr(reqset, "add_requirement"):
reqset.add_requirement(ireq)
else: # Pip >= 22.1.0
resolver._add_requirement_to_set(reqset, ireq)
results = reqset.prepare_files(finder)
result = reqset.requirements
reqset.cleanup_files()
return result
if make_preparer_provider is None:
raise TypeError("Cannot create requirement preparer, cannot resolve!")
result_reqset = resolver.resolve(*resolver_args) # type: ignore
if result_reqset is None:
result_reqset = reqset
Expand Down
54 changes: 12 additions & 42 deletions pipenv/vendor/pip_shims/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,47 +56,6 @@
)


PIP_VERSION_SET = {
"7.0.0",
"7.0.1",
"7.0.2",
"7.0.3",
"7.1.0",
"7.1.1",
"7.1.2",
"8.0.0",
"8.0.1",
"8.0.2",
"8.0.3",
"8.1.0",
"8.1.1",
"8.1.2",
"9.0.0",
"9.0.1",
"9.0.2",
"9.0.3",
"10.0.0",
"10.0.1",
"18.0",
"18.1",
"19.0",
"19.0.1",
"19.0.2",
"19.0.3",
"19.1",
"19.1.1",
"19.2",
"19.2.1",
"19.2.2",
"19.2.3",
"19.3",
"19.3.1",
"20.0",
"20.0.1",
"20.0.2",
}


ImportTypesBase = collections.namedtuple(
"ImportTypes", ["FUNCTION", "CLASS", "MODULE", "CONTEXTMANAGER"]
)
Expand Down Expand Up @@ -992,6 +951,9 @@ def import_pip():
RequirementSet = ShimmedPathCollection("RequirementSet", ImportTypes.CLASS)
RequirementSet.create_path("req.req_set.RequirementSet", "7.0.0", "9999")

BuildTracker = ShimmedPathCollection("BuildTracker", ImportTypes.CONTEXTMANAGER)
BuildTracker.create_path("operations.build.build_tracker.BuildTracker", "22.1", "9999")

RequirementTracker = ShimmedPathCollection(
"RequirementTracker", ImportTypes.CONTEXTMANAGER
)
Expand Down Expand Up @@ -1021,11 +983,18 @@ def import_pip():
"get_requirement_tracker", ImportTypes.CONTEXTMANAGER
)
get_requirement_tracker.set_default(
functools.partial(compat.get_requirement_tracker, RequirementTracker.shim())
functools.partial(compat.get_tracker, RequirementTracker.shim())
)
get_requirement_tracker.create_path(
"req.req_tracker.get_requirement_tracker", "7.0.0", "9999"
)
get_build_tracker = ShimmedPathCollection("get_build_tracker", ImportTypes.CONTEXTMANAGER)
get_build_tracker.set_default(
functools.partial(compat.get_tracker, BuildTracker.shim(), tracker_type="BUILD")
)
get_build_tracker.create_path(
"operations.build.build_tracker.get_build_tracker", "7.0.0", "9999"
)

Resolver = ShimmedPathCollection("Resolver", ImportTypes.CLASS)
Resolver.create_path("resolve.Resolver", "7.0.0", "19.1.1")
Expand Down Expand Up @@ -1137,6 +1106,7 @@ def import_pip():
install_cmd_provider=InstallCommand,
preparer_fn=RequirementPreparer,
downloader_provider=Downloader,
build_tracker_fn=get_build_tracker,
req_tracker_fn=get_requirement_tracker,
finder_provider=get_package_finder,
)
Expand Down
2 changes: 1 addition & 1 deletion pipenv/vendor/requirementslib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from .models.pipfile import Pipfile
from .models.requirements import Requirement

__version__ = "1.6.5"
__version__ = "1.6.6"


logger = logging.getLogger(__name__)
Expand Down
1 change: 0 additions & 1 deletion pipenv/vendor/requirementslib/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
# -*- coding: utf-8 -*-
Loading

0 comments on commit 4b977e4

Please sign in to comment.