diff --git a/pipenv/vendor/requirementslib/__init__.py b/pipenv/vendor/requirementslib/__init__.py index bab419ae..17be31ec 100644 --- a/pipenv/vendor/requirementslib/__init__.py +++ b/pipenv/vendor/requirementslib/__init__.py @@ -5,7 +5,7 @@ from .models.lockfile import Lockfile from .models.pipfile import Pipfile from .models.requirements import Requirement -__version__ = "2.0.1" +__version__ = "2.0.2.dev0" logger = logging.getLogger(__name__) diff --git a/pipenv/vendor/requirementslib/models/cache.py b/pipenv/vendor/requirementslib/models/cache.py index 7a69133a..463a66a3 100644 --- a/pipenv/vendor/requirementslib/models/cache.py +++ b/pipenv/vendor/requirementslib/models/cache.py @@ -3,14 +3,12 @@ import copy import hashlib import json import os -import pathlib -import sys import pipenv.vendor.vistir as vistir -from pipenv.patched.pip._vendor.packaging.requirements import Requirement from pipenv.patched.pip._internal.utils.hashes import FAVORITE_HASH from pipenv.patched.pip._internal.vcs.versioncontrol import VcsSupport from pipenv.patched.pip._vendor.cachecontrol.cache import DictCache +from pipenv.patched.pip._vendor.packaging.requirements import Requirement from pipenv.vendor.platformdirs import user_cache_dir from .utils import as_tuple, get_pinned_version, key_from_req, lookup_table @@ -130,7 +128,7 @@ class HashCache(DictCache): def __init__(self, *args, **kwargs): session = kwargs.pop("session", None) if not session: - import pipenv.patched.pip._vendor.requests as requests + import requests session = requests.session() atexit.register(session.close) diff --git a/pipenv/vendor/requirementslib/models/dependencies.py b/pipenv/vendor/requirementslib/models/dependencies.py index b8d95d64..84af59a1 100644 --- a/pipenv/vendor/requirementslib/models/dependencies.py +++ b/pipenv/vendor/requirementslib/models/dependencies.py @@ -1,18 +1,12 @@ -# -*- coding=utf-8 -*- - import atexit import contextlib import copy import functools import os -from contextlib import ExitStack from json import JSONDecodeError import pipenv.vendor.attr as attr import pipenv.patched.pip._vendor.requests as requests -from pipenv.patched.pip._vendor.packaging.markers import Marker -from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name -from pipenv.patched.pip._vendor.packaging.version import parse from pipenv.patched.pip._internal.cache import WheelCache from pipenv.patched.pip._internal.models.format_control import FormatControl from pipenv.patched.pip._internal.operations.build.build_tracker import get_build_tracker @@ -20,6 +14,9 @@ from pipenv.patched.pip._internal.req.constructors import install_req_from_line from pipenv.patched.pip._internal.req.req_install import InstallRequirement from pipenv.patched.pip._internal.req.req_set import RequirementSet from pipenv.patched.pip._internal.utils.temp_dir import TempDirectory, global_tempdir_manager +from pipenv.patched.pip._vendor.packaging.markers import Marker +from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name +from pipenv.patched.pip._vendor.packaging.version import parse from pipenv.vendor.vistir.compat import fs_str from pipenv.vendor.vistir.contextmanagers import temp_environ from pipenv.vendor.vistir.path import create_tracked_tempdir @@ -35,7 +32,6 @@ from .cache import CACHE_DIR, DependencyCache from .setup_info import SetupInfo from .utils import ( clean_requires_python, - fix_requires_python_marker, format_requirement, full_groupby, is_pinned_requirement, @@ -46,23 +42,12 @@ from .utils import ( ) if MYPY_RUNNING: - from typing import ( - Any, - Dict, - Generator, - List, - Optional, - Set, - Text, - Tuple, - TypeVar, - Union, - ) + from typing import Any, Dict, List, Optional, Set, Text, TypeVar, Union - from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement - from pipenv.patched.pip._internal.commands.base_command import Command + from pipenv.patched.pip._internal.commands import Command from pipenv.patched.pip._internal.index.package_finder import PackageFinder from pipenv.patched.pip._internal.models.candidate import InstallationCandidate + from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement TRequirement = TypeVar("TRequirement") RequirementType = TypeVar( @@ -95,11 +80,11 @@ def find_all_matches(finder, ireq, pre=False): ireq. :param finder: A package finder for discovering matching candidates. - :type finder: :class:`~pipenv.patched.pip._internal.index.PackageFinder` + :type finder: :class:`~pip._internal.index.PackageFinder` :param ireq: An install requirement. - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A list of matching candidates. - :rtype: list[:class:`~pipenv.patched.pip._internal.index.InstallationCandidate`] + :rtype: list[:class:`~pip._internal.index.InstallationCandidate`] """ candidates = clean_requires_python(finder.find_all_candidates(ireq.name)) @@ -207,7 +192,7 @@ class AbstractDependency(object): """Get the dependencies of the supplied candidate. :param candidate: An installrequirement - :type candidate: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type candidate: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A list of abstract dependencies :rtype: list[:class:`~requirementslib.models.dependency.AbstractDependency`] """ @@ -316,11 +301,11 @@ def get_dependencies(ireq, sources=None, parent=None): """Get all dependencies for a given install requirement. :param ireq: A single InstallRequirement - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :param sources: Pipfile-formatted sources, defaults to None :type sources: list[dict], optional :param parent: The parent of this list of dependencies, defaults to None - :type parent: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type parent: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A set of dependency lines for generating new InstallRequirements. :rtype: set(str) """ @@ -350,7 +335,7 @@ def get_dependencies_from_wheel_cache(ireq): cache. :param ireq: A single InstallRequirement - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A set of dependency lines for generating new InstallRequirements. :rtype: set(str) or None """ @@ -377,7 +362,7 @@ def get_dependencies_from_json(ireq): api. :param ireq: A single InstallRequirement - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A set of dependency lines for generating new InstallRequirements. :rtype: set(str) or None """ @@ -427,7 +412,7 @@ def get_dependencies_from_cache(ireq): dependency cache. :param ireq: A single InstallRequirement - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :return: A set of dependency lines for generating new InstallRequirements. :rtype: set(str) or None """ @@ -531,7 +516,7 @@ def get_dependencies_from_index(dep, sources=None, pip_options=None, wheel_cache resolver. :param dep: A single InstallRequirement - :type dep: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type dep: :class:`~pip._internal.req.req_install.InstallRequirement` :param sources: Pipfile-formatted sources, defaults to None :type sources: list[dict], optional :return: A set of dependency lines for generating new InstallRequirements. @@ -570,9 +555,9 @@ def get_pip_options(args=None, sources=None, pip_command=None): :param sources: A list of pipfile-formatted sources, defaults to None :param sources: list[dict], optional :param pip_command: A pre-built pip command instance - :type pip_command: :class:`~pipenv.patched.pip._internal.cli.base_command.Command` + :type pip_command: :class:`~pip._internal.cli.base_command.Command` :return: An instance of pip_options using the supplied arguments plus sane defaults - :rtype: :class:`~pipenv.patched.pip._internal.cli.cmdoptions` + :rtype: :class:`~pip._internal.cli.cmdoptions` """ if not pip_command: @@ -594,11 +579,11 @@ def get_finder(sources=None, pip_command=None, pip_options=None): :param sources: A list of pipfile-formatted sources, defaults to None :param sources: list[dict], optional :param pip_command: A pip command instance, defaults to None - :type pip_command: :class:`~pipenv.patched.pip._internal.cli.base_command.Command` + :type pip_command: :class:`~pip._internal.cli.base_command.Command` :param pip_options: A pip options, defaults to None - :type pip_options: :class:`~pipenv.patched.pip._internal.cli.cmdoptions` + :type pip_options: :class:`~pip._internal.cli.cmdoptions` :return: A package finder - :rtype: :class:`~pipenv.patched.pip._internal.index.PackageFinder` + :rtype: :class:`~pip._internal.index.PackageFinder` """ if not pip_command: @@ -618,12 +603,12 @@ def start_resolver(finder=None, session=None, wheel_cache=None): """Context manager to produce a resolver. :param finder: A package finder to use for searching the index - :type finder: :class:`~pipenv.patched.pip._internal.index.PackageFinder` + :type finder: :class:`~pip._internal.index.PackageFinder` :param :class:`~requests.Session` session: A session instance - :param :class:`~pipenv.patched.pip._internal.cache.WheelCache` wheel_cache: A pip WheelCache instance + :param :class:`~pip._internal.cache.WheelCache` wheel_cache: A pip WheelCache instance :return: A 3-tuple of finder, preparer, resolver - :rtype: (:class:`~pipenv.patched.pip._internal.operations.prepare.RequirementPreparer`, - :class:`~pipenv.patched.pip._internal.resolve.Resolver`) + :rtype: (:class:`~pip._internal.operations.prepare.RequirementPreparer`, + :class:`~pip._internal.resolve.Resolver`) """ pip_command = get_pip_command() diff --git a/pipenv/vendor/requirementslib/models/markers.py b/pipenv/vendor/requirementslib/models/markers.py index 11f84ebd..8c82d5b9 100644 --- a/pipenv/vendor/requirementslib/models/markers.py +++ b/pipenv/vendor/requirementslib/models/markers.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import itertools import operator import re @@ -6,7 +5,7 @@ from collections.abc import Mapping, Set from functools import lru_cache, reduce import pipenv.vendor.attr as attr -import distlib.markers +from pipenv.vendor.distlib import markers from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker from pipenv.patched.pip._vendor.packaging.specifiers import LegacySpecifier, Specifier, SpecifierSet from pipenv.patched.pip._vendor.packaging.version import parse @@ -514,7 +513,7 @@ def get_contained_pyversions(marker): return set() # Use the distlib dictionary parser to create a dictionary 'trie' which is a bit # easier to reason about - marker_dict = distlib.markers.parse_marker(marker_str)[0] + marker_dict = markers.parse_marker(marker_str)[0] version_set = set() pyversions, _ = parse_marker_dict(marker_dict) if isinstance(pyversions, set): diff --git a/pipenv/vendor/requirementslib/models/metadata.py b/pipenv/vendor/requirementslib/models/metadata.py index d008d150..62259db5 100644 --- a/pipenv/vendor/requirementslib/models/metadata.py +++ b/pipenv/vendor/requirementslib/models/metadata.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- import datetime import functools import io @@ -12,10 +11,10 @@ from functools import reduce from typing import Sequence import pipenv.vendor.attr as attr -import distlib.metadata -import distlib.wheel import pipenv.patched.pip._vendor.requests as requests import pipenv.vendor.vistir as vistir +from pipenv.vendor.distlib import wheel +from pipenv.vendor.distlib.metadata import Metadata from pipenv.patched.pip._vendor.packaging.markers import Marker from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement from pipenv.patched.pip._vendor.packaging.specifiers import Specifier, SpecifierSet @@ -47,7 +46,6 @@ if MYPY_RUNNING: Any, Callable, Dict, - Generator, Generic, Iterator, List, @@ -59,7 +57,7 @@ if MYPY_RUNNING: Union, ) - from pipenv.vendor.attr import Attribute # noqa + from attr import Attribute # noqa from .setup_info import SetupInfo @@ -137,7 +135,7 @@ def validate_digest(inst, attrib, value): def get_local_wheel_metadata(wheel_file): - # type: (str) -> Optional[distlib.metadata.Metadata] + # type: (str) -> Optional[Metadata] parsed_metadata = None with io.open(wheel_file, "rb") as fh: with zipfile.ZipFile(fh, mode="r", compression=zipfile.ZIP_DEFLATED) as zf: @@ -149,7 +147,7 @@ def get_local_wheel_metadata(wheel_file): if metadata is None: raise RuntimeError("No metadata found in wheel: {0}".format(wheel_file)) with zf.open(metadata, "r") as metadata_fh: - parsed_metadata = distlib.metadata.Metadata(fileobj=metadata_fh) + parsed_metadata = Metadata(fileobj=metadata_fh) return parsed_metadata @@ -165,7 +163,7 @@ def get_remote_sdist_metadata(line): def get_remote_wheel_metadata(whl_file): - # type: (str) -> Optional[distlib.metadata.Metadata] + # type: (str) -> Optional[Metadata] parsed_metadata = None data = io.BytesIO() with vistir.contextmanagers.open_file(whl_file) as fp: @@ -180,7 +178,7 @@ def get_remote_wheel_metadata(whl_file): if metadata is None: raise RuntimeError("No metadata found in wheel: {0}".format(whl_file)) with zf.open(metadata, "r") as metadata_fh: - parsed_metadata = distlib.metadata.Metadata(fileobj=metadata_fh) + parsed_metadata = Metadata(fileobj=metadata_fh) return parsed_metadata @@ -258,11 +256,11 @@ class Dependency(object): markers = [marker_from_specifier(str(s)) for s in specifiers] py_version_part = reduce(merge_markers, markers) if self.markers: - line_str = "{0}; {1}".format(line_str, str(self.markers)) + line_str = "{0} ; {1}".format(line_str, str(self.markers)) if py_version_part: line_str = "{0} and {1}".format(line_str, py_version_part) elif py_version_part and not self.markers: - line_str = "{0}; {1}".format(line_str, py_version_part) + line_str = "{0} ; {1}".format(line_str, py_version_part) return line_str def pin(self): @@ -350,7 +348,7 @@ class Dependency(object): marker_str = "{0!s}".format(marker) req_str = "{0}=={1}".format(info.name, info.version) if marker_str: - req_str = "{0}; {1}".format(req_str, marker_str) + req_str = "{0} ; {1}".format(req_str, marker_str) req = PackagingRequirement(req_str) requires_python_str = ( info.requires_python if info.requires_python is not None else "" @@ -570,7 +568,7 @@ class ReleaseUrl(object): markers = self.markers req_str = "{0} @ {1}#egg={0}".format(self.name, self.url) if markers: - req_str = "{0}; {1}".format(req_str, markers) + req_str = "{0} ; {1}".format(req_str, markers) return req_str def get_markers_from_wheel(self): @@ -644,7 +642,7 @@ class ReleaseUrl(object): release_url = cls(**filter_dict(creation_kwargs)) # type: ignore if release_url.is_wheel: supported_tags = [ - parse_tag(Tag(*tag)) for tag in distlib.wheel.Wheel(release_url.url).tags + parse_tag(Tag(*tag)) for tag in wheel.Wheel(release_url.url).tags ] release_url = attr.evolve(release_url, tags=supported_tags) return release_url @@ -858,8 +856,8 @@ class ReleaseCollection(object): def wheels(self): # type: () -> Iterator[ReleaseUrl] for release in self.sort_releases(): - for wheel in release.wheels: - yield wheel + for w in release.wheels: + yield w def sdists(self): # type: () -> Iterator[ReleaseUrl] @@ -1060,8 +1058,8 @@ class Package(object): @property def latest_wheels(self): # type: () -> Iterator[ReleaseUrl] - for wheel in self.urls.wheels: - yield wheel + for w in self.urls.wheels: + yield w @property def dependencies(self): diff --git a/pipenv/vendor/requirementslib/models/project.py b/pipenv/vendor/requirementslib/models/project.py index a879ae92..4deb7b99 100644 --- a/pipenv/vendor/requirementslib/models/project.py +++ b/pipenv/vendor/requirementslib/models/project.py @@ -135,7 +135,7 @@ class Project(object): ) def add_line_to_pipfile(self, line, develop): - from pipenv.vendor.requirementslib import Requirement + from requirementslib import Requirement requirement = Requirement.from_line(line) section = self._get_pipfile_section(develop=develop) diff --git a/pipenv/vendor/requirementslib/models/requirements.py b/pipenv/vendor/requirementslib/models/requirements.py index b0752854..e5fc4a4b 100644 --- a/pipenv/vendor/requirementslib/models/requirements.py +++ b/pipenv/vendor/requirementslib/models/requirements.py @@ -60,7 +60,6 @@ from .setup_info import ( _prepare_wheel_building_kwargs, ast_parse_setup_py, get_metadata, - parse_setup_cfg, ) from .url import URI from .utils import ( @@ -205,7 +204,7 @@ class Line(object): def __str__(self): # type: () -> str if self.markers: - return "{0}; {1}".format(self.get_line(), self.markers) + return "{0} ; {1}".format(self.get_line(), self.markers) return self.get_line() def get_line( @@ -237,7 +236,7 @@ class Line(object): # we anticipate this will be used if passing directly to the command line # for pip. if with_markers and self.markers: - line = "{0}; {1}".format(line, self.markers) + line = "{0} ; {1}".format(line, self.markers) if with_prefix and self.editable and not as_list: line = '"{0}"'.format(line) if as_list: @@ -1182,8 +1181,7 @@ class Line(object): def parse_markers(self): # type: () -> None if self.markers: - marker_str = self.markers.replace('"', "'") - markers = PackagingRequirement("fakepkg; {0}".format(marker_str)).marker + pkg_name, markers = split_markers_from_line(self.line) self.parsed_marker = markers @property @@ -1287,7 +1285,6 @@ class Line(object): if self.markers: self.markers = self.markers.replace('"', "'") self.parse_extras() - self.line = self.line.strip('"').strip("'").strip() if self.line.startswith("git+file:/") and not self.line.startswith( "git+file:///" ): @@ -1469,7 +1466,7 @@ class FileRequirement(object): forward slashes. Can be None if the line is a remote URI. - `uri` is the absolute URI to the package. Can be None if the line is not a URI. - - `link` is an instance of :class:`pipenv.patched.pip._internal.index.Link`, + - `link` is an instance of :class:`pip._internal.index.Link`, representing a URI parse result based on the value of `uri`. This function is provided to deal with edge cases concerning URIs @@ -2536,7 +2533,7 @@ class Requirement(object): if self._specifiers and not (self.is_file_or_url or self.is_vcs): line_parts.append(self._specifiers) if self.markers: - line_parts.append("; {0}".format(self.markers.replace('"', "'"))) + line_parts.append(" ; {0}".format(self.markers.replace('"', "'"))) if self.hashes_as_pip and not (self.editable or self.vcs or self.is_vcs): line_parts.append(self.hashes_as_pip) if self.editable: @@ -2695,7 +2692,9 @@ class Requirement(object): r = named_req_from_parsed_line(parsed_line) req_markers = None if parsed_line.markers: - req_markers = PackagingRequirement("fakepkg; {0}".format(parsed_line.markers)) + req_markers = PackagingRequirement( + "fakepkg ; {0}".format(parsed_line.markers) + ) if r is not None and r.req is not None: r.req.marker = getattr(req_markers, "marker", None) if req_markers else None args = {} # type: Dict[STRING_TYPE, CREATION_ARG_TYPES] @@ -2754,7 +2753,7 @@ class Requirement(object): req_markers = None if markers: markers = str(markers) - req_markers = PackagingRequirement("fakepkg; {0}".format(markers)) + req_markers = PackagingRequirement("fakepkg ; {0}".format(markers)) if r.req is not None: r.req.marker = req_markers.marker extras = _pipfile.get("extras") @@ -2821,7 +2820,7 @@ class Requirement(object): # type: () -> Marker markers = self.markers if markers: - fake_pkg = PackagingRequirement("fakepkg; {0}".format(markers)) + fake_pkg = PackagingRequirement("fakepkg ; {0}".format(markers)) markers = fake_pkg.marker return markers @@ -2994,7 +2993,7 @@ class Requirement(object): :param sources: list[dict], optional :param PackageFinder finder: A **PackageFinder** instance from pip's repository implementation :return: A list of Installation Candidates - :rtype: list[ :class:`~pipenv.patched.pip._internal.index.InstallationCandidate` ] + :rtype: list[ :class:`~pip._internal.index.InstallationCandidate` ] """ from .dependencies import find_all_matches, get_finder diff --git a/pipenv/vendor/requirementslib/models/setup_info.py b/pipenv/vendor/requirementslib/models/setup_info.py index 56f98e7a..4bfdb310 100644 --- a/pipenv/vendor/requirementslib/models/setup_info.py +++ b/pipenv/vendor/requirementslib/models/setup_info.py @@ -2,28 +2,32 @@ import ast import atexit import configparser import contextlib -import importlib -import operator import os import shutil import sys from collections.abc import Iterable, Mapping -from functools import lru_cache, partial +from contextlib import ExitStack +from functools import lru_cache +from os import scandir from pathlib import Path from urllib.parse import parse_qs, urlparse, urlunparse from weakref import finalize -import pipenv.vendor.attr as attr -from pipenv.patched.pip._vendor.pep517 import envbuild -from pipenv.patched.pip._vendor.pep517 import wrappers +import attr +from pipenv.patched.pip._vendor.pep517 import envbuild, wrappers from pipenv.vendor.distlib.wheel import Wheel -from pipenv.patched.pip._vendor.packaging.markers import Marker -from pipenv.patched.pip._vendor.packaging.specifiers import SpecifierSet -from pipenv.patched.pip._vendor.packaging.version import parse -from pipenv.patched.pip._internal.commands.install import InstallCommand from pipenv.patched.pip._internal.network.download import Downloader from pipenv.patched.pip._internal.utils.temp_dir import global_tempdir_manager from pipenv.patched.pip._internal.utils.urls import url_to_path +from pipenv.patched.pip._vendor.packaging.markers import Marker +from pipenv.patched.pip._vendor.packaging.specifiers import SpecifierSet +from pipenv.patched.pip._vendor.packaging.version import parse +from pipenv.patched.pip._vendor.pkg_resources import ( + PathMetadata, + Requirement, + distributions_from_metadata, + find_distributions, +) from pipenv.vendor.platformdirs import user_cache_dir from pipenv.vendor.vistir.contextmanagers import cd, temp_path from pipenv.vendor.vistir.misc import run @@ -42,14 +46,6 @@ from .utils import ( strip_extras_markers_from_requirement, ) -try: - import pipenv.patched.pip._vendor.pkg_resources.extern.packaging.requirements as pkg_resources_requirements -except ModuleNotFoundError: - pkg_resources_requirements = None - -from contextlib import ExitStack -from os import scandir - if MYPY_RUNNING: from typing import ( Any, @@ -66,12 +62,11 @@ if MYPY_RUNNING: Union, ) - import pipenv.patched.pip._vendor.requests as requests - from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement from pipenv.patched.pip._internal.index.package_finder import PackageFinder from pipenv.patched.pip._internal.req.req_install import InstallRequirement - from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution, EggInfoDistribution, PathMetadata - from pipenv.patched.pip._vendor.pkg_resources import Requirement as PkgResourcesRequirement + from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement + from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution, EggInfoDistribution + from pipenv.patched.pip._vendor.requests import Session try: from setuptools.dist import Distribution @@ -157,9 +152,7 @@ def make_base_requirements(reqs): for req in reqs: if isinstance(req, BaseRequirement): requirements.add(req) - elif pkg_resources_requirements is not None and isinstance( - req, pkg_resources_requirements.Requirement - ): + elif isinstance(req, Requirement): requirements.add(BaseRequirement.from_req(req)) elif req and isinstance(req, str) and not req.startswith("#"): requirements.add(BaseRequirement.from_string(req)) @@ -585,8 +578,7 @@ def _get_src_dir(root): @lru_cache() def ensure_reqs(reqs): - # type: (List[Union[S, PkgResourcesRequirement]]) -> List[PkgResourcesRequirement] - import pipenv.patched.pip._vendor.pkg_resources as pkg_resources + # type: (List[Union[S, Requirement]]) -> List[Requirement] if not isinstance(reqs, Iterable): raise TypeError("Expecting an Iterable, got %r" % reqs) @@ -595,7 +587,7 @@ def ensure_reqs(reqs): if not req: continue if isinstance(req, str): - req = pkg_resources.Requirement.parse("{0}".format(str(req))) + req = Requirement.parse("{0}".format(str(req))) # req = strip_extras_markers_from_requirement(req) new_reqs.append(req) return new_reqs @@ -731,13 +723,12 @@ def find_distinfo(target, pkg_name=None): def get_distinfo_dist(path, pkg_name=None): # type: (S, Optional[S]) -> Optional[DistInfoDistribution] - import pipenv.patched.pip._vendor.pkg_resources as pkg_resources dist_dir = next(iter(find_distinfo(path, pkg_name=pkg_name)), None) if dist_dir is not None: metadata_dir = dist_dir.path base_dir = os.path.dirname(metadata_dir) - dist = next(iter(pkg_resources.find_distributions(base_dir)), None) + dist = next(iter(find_distributions(base_dir)), None) if dist is not None: return dist return None @@ -745,14 +736,13 @@ def get_distinfo_dist(path, pkg_name=None): def get_egginfo_dist(path, pkg_name=None): # type: (S, Optional[S]) -> Optional[EggInfoDistribution] - import pipenv.patched.pip._vendor.pkg_resources as pkg_resources egg_dir = next(iter(find_egginfo(path, pkg_name=pkg_name)), None) if egg_dir is not None: metadata_dir = egg_dir.path base_dir = os.path.dirname(metadata_dir) - path_metadata = pkg_resources.PathMetadata(base_dir, metadata_dir) - dist_iter = pkg_resources.distributions_from_metadata(path_metadata.egg_info) + path_metadata = PathMetadata(base_dir, metadata_dir) + dist_iter = distributions_from_metadata(path_metadata.egg_info) dist = next(iter(dist_iter), None) if dist is not None: return dist @@ -829,7 +819,7 @@ def get_metadata_from_dist(dist): dep_map = dist._build_dep_map() except Exception: dep_map = {} - deps = [] # type: List[PkgResourcesRequirement] + deps = [] # type: List[Requirement] extras = {} for k in dep_map.keys(): if k is None: @@ -926,18 +916,18 @@ class BaseRequirement(object): name = attr.ib(default="", eq=True, order=True) # type: STRING_TYPE requirement = attr.ib( default=None, eq=True, order=True - ) # type: Optional[PkgResourcesRequirement] + ) # type: Optional[Requirement] def __str__(self): # type: () -> S return "{0}".format(str(self.requirement)) def as_dict(self): - # type: () -> Dict[STRING_TYPE, Optional[PkgResourcesRequirement]] + # type: () -> Dict[STRING_TYPE, Optional[Requirement]] return {self.name: self.requirement} def as_tuple(self): - # type: () -> Tuple[STRING_TYPE, Optional[PkgResourcesRequirement]] + # type: () -> Tuple[STRING_TYPE, Optional[Requirement]] return (self.name, self.requirement) @classmethod @@ -951,7 +941,7 @@ class BaseRequirement(object): @classmethod @lru_cache() def from_req(cls, req): - # type: (PkgResourcesRequirement) -> BaseRequirement + # type: (Requirement) -> BaseRequirement name = None key = getattr(req, "key", None) name = getattr(req, "name", None) @@ -1484,7 +1474,7 @@ build-backend = "{1}" @classmethod @lru_cache() def from_ireq(cls, ireq, subdir=None, finder=None, session=None): - # type: (InstallRequirement, Optional[AnyStr], Optional[PackageFinder], Optional[requests.Session]) -> Optional[SetupInfo] + # type: (InstallRequirement, Optional[AnyStr], Optional[PackageFinder], Optional[Session]) -> Optional[SetupInfo] if not ireq.link: return None if ireq.link.is_wheel: diff --git a/pipenv/vendor/requirementslib/models/utils.py b/pipenv/vendor/requirementslib/models/utils.py index fac39713..16e661f1 100644 --- a/pipenv/vendor/requirementslib/models/utils.py +++ b/pipenv/vendor/requirementslib/models/utils.py @@ -1,4 +1,3 @@ -import io import os import re import string @@ -10,11 +9,14 @@ from pathlib import Path import pipenv.vendor.tomlkit as tomlkit from pipenv.vendor.attr import validators -from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker, Op, Value, Variable -from pipenv.patched.pip._vendor.packaging.specifiers import InvalidSpecifier, Specifier, SpecifierSet -from pipenv.patched.pip._vendor.packaging.version import parse as parse_version from pipenv.patched.pip._internal.models.link import Link from pipenv.patched.pip._internal.req.constructors import install_req_from_line +from pipenv.patched.pip._vendor.packaging.markers import InvalidMarker, Marker, Op, Value, Variable +from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement +from pipenv.patched.pip._vendor.packaging.specifiers import InvalidSpecifier, Specifier, SpecifierSet +from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name +from pipenv.patched.pip._vendor.packaging.version import parse as parse_version +from pipenv.patched.pip._vendor.pkg_resources import Requirement, get_distribution, safe_name from pipenv.vendor.plette.models import Package, PackageCollection from pipenv.vendor.tomlkit.container import Container from pipenv.vendor.tomlkit.items import AoT, Array, Bool, InlineTable, Item, String, Table @@ -35,7 +37,6 @@ if MYPY_RUNNING: List, Match, Optional, - Sequence, Set, Text, Tuple, @@ -48,8 +49,6 @@ if MYPY_RUNNING: from pipenv.patched.pip._vendor.packaging.markers import Op as PkgResourcesOp from pipenv.patched.pip._vendor.packaging.markers import Value as PkgResourcesValue from pipenv.patched.pip._vendor.packaging.markers import Variable as PkgResourcesVariable - from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement - from pipenv.patched.pip._vendor.pkg_resources import Requirement as PkgResourcesRequirement from pipenv.patched.pip._vendor.urllib3.util.url import Url _T = TypeVar("_T") @@ -58,7 +57,7 @@ if MYPY_RUNNING: TValue = TypeVar("TValue", PkgResourcesValue, Value) TOp = TypeVar("TOp", PkgResourcesOp, Op) MarkerTuple = Tuple[TVariable, TOp, TValue] - TRequirement = Union[PackagingRequirement, PkgResourcesRequirement] + TRequirement = Union[PackagingRequirement, Requirement] STRING_TYPE = Union[bytes, str, Text] TOML_DICT_TYPES = Union[Container, Package, PackageCollection, Table, InlineTable] S = TypeVar("S", bytes, str, Text) @@ -189,7 +188,6 @@ def init_requirement(name): if not isinstance(name, str): raise TypeError("must supply a name to generate a requirement") - from pipenv.patched.pip._vendor.pkg_resources import Requirement req = Requirement.parse(name) req.vcs = None @@ -225,9 +223,6 @@ def parse_extras(extras_str): :return: A sorted list of extras :rtype: List[str] """ - - from pipenv.patched.pip._vendor.pkg_resources import Requirement - extras = Requirement.parse("fakepkg{0}".format(extras_to_string(extras_str))).extras return sorted(dedup([extra.lower() for extra in extras])) @@ -456,11 +451,8 @@ def _strip_extras_markers(marker): @lru_cache() def get_setuptools_version(): # type: () -> Optional[STRING_TYPE] - import pipenv.patched.pip._vendor.pkg_resources as pkg_resources - setuptools_dist = pkg_resources.get_distribution( - pkg_resources.Requirement("setuptools") - ) + setuptools_dist = get_distribution(Requirement("setuptools")) return getattr(setuptools_dist, "version", None) @@ -526,10 +518,7 @@ def split_markers_from_line(line): ) if line_quote and line.endswith(line_quote): line = line.strip(line_quote) - if not any(line.startswith(uri_prefix) for uri_prefix in SCHEME_LIST): - marker_sep = ";" - else: - marker_sep = "; " + marker_sep = " ; " markers = None if marker_sep in line: line, markers = line.split(marker_sep, 1) @@ -644,7 +633,7 @@ def _requirement_to_str_lowercase_name(requirement): parts.append("@ {0}".format(requirement.url)) if requirement.marker: - parts.append("; {0}".format(requirement.marker)) + parts.append(" ; {0}".format(requirement.marker)) return "".join(parts) @@ -666,11 +655,11 @@ def format_requirement(ireq): if str(ireq.req.marker) != str(ireq.markers): if not ireq.req.marker: - line = "{}; {}".format(line, ireq.markers) + line = "{} ; {}".format(line, ireq.markers) else: name, markers = line.split(";", 1) markers = markers.strip() - line = "{}; ({}) and ({})".format(name, markers, ireq.markers) + line = "{} ; ({}) and ({})".format(name, markers, ireq.markers) return line @@ -851,7 +840,7 @@ def name_from_req(req): def make_install_requirement( name, version=None, extras=None, markers=None, constraint=False ): - """Generates an :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement`. + """Generates an :class:`~pip._internal.req.req_install.InstallRequirement`. Create an InstallRequirement from the supplied metadata. @@ -866,7 +855,7 @@ def make_install_requirement( :param constraint: Whether to flag the requirement as a constraint, defaults to False. :param constraint: bool, optional :return: A generated InstallRequirement - :rtype: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :rtype: :class:`~pip._internal.req.req_install.InstallRequirement` """ requirement_string = "{0}".format(name) if extras: @@ -876,16 +865,16 @@ def make_install_requirement( if version: requirement_string = "{0}=={1}".format(requirement_string, str(version)) if markers: - requirement_string = "{0}; {1}".format(requirement_string, str(markers)) + requirement_string = "{0} ; {1}".format(requirement_string, str(markers)) return install_req_from_line(requirement_string, constraint=constraint) def version_from_ireq(ireq): """version_from_ireq Extract the version from a supplied - :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :class:`~pip._internal.req.req_install.InstallRequirement` :param ireq: An InstallRequirement - :type ireq: :class:`~pipenv.patched.pip._internal.req.req_install.InstallRequirement` + :type ireq: :class:`~pip._internal.req.req_install.InstallRequirement` :return: The version of the InstallRequirement. :rtype: str """ @@ -907,7 +896,7 @@ def clean_requires_python(candidates): `requires_python` attributes.""" all_candidates = [] sys_version = ".".join(map(str, sys.version_info[:3])) - from pipenv.patched.pip._vendor.packaging.version import parse as parse_version + from pip._vendor.packaging.version import parse as parse_version py_version = parse_version(os.environ.get("PIP_PYTHON_VERSION", sys_version)) for c in candidates: @@ -931,8 +920,6 @@ def clean_requires_python(candidates): def fix_requires_python_marker(requires_python): - from pipenv.patched.pip._vendor.packaging.requirements import Requirement as PackagingRequirement - marker_str = "" if any(requires_python.startswith(op) for op in Specifier._operators.keys()): spec_dict = defaultdict(set) @@ -952,7 +939,7 @@ def fix_requires_python_marker(requires_python): for op, vals in spec_dict.items() ] ) - marker_to_add = PackagingRequirement("fakepkg; {0}".format(marker_str)).marker + marker_to_add = PackagingRequirement("fakepkg ; {0}".format(marker_str)).marker return marker_to_add @@ -981,8 +968,6 @@ def get_name_variants(pkg): if not isinstance(pkg, str): raise TypeError("must provide a string to derive package names") - from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name - from pipenv.patched.pip._vendor.pkg_resources import safe_name pkg = pkg.lower() names = {safe_name(pkg), canonicalize_name(pkg), pkg.replace("-", "_")} diff --git a/pipenv/vendor/requirementslib/utils.py b/pipenv/vendor/requirementslib/utils.py index 71811fa2..1ea5010f 100644 --- a/pipenv/vendor/requirementslib/utils.py +++ b/pipenv/vendor/requirementslib/utils.py @@ -1,6 +1,3 @@ -# -*- coding=utf-8 -*- -from __future__ import absolute_import, print_function - import logging import os import sys @@ -14,6 +11,7 @@ from pipenv.patched.pip._internal.commands.install import InstallCommand from pipenv.patched.pip._internal.models.target_python import TargetPython from pipenv.patched.pip._internal.utils.filetypes import is_archive_file from pipenv.patched.pip._internal.utils.misc import is_installable_dir +from pipenv.patched.pip._vendor.packaging import specifiers from pipenv.vendor.vistir.path import ensure_mkdir_p, is_valid_url from .environment import MYPY_RUNNING @@ -159,7 +157,6 @@ def convert_entry_to_path(path): def is_installable_file(path): # type: (PipfileType) -> bool """Determine if a path can potentially be installed.""" - from pipenv.patched.pip._vendor.packaging import specifiers if isinstance(path, Mapping): path = convert_entry_to_path(path) @@ -203,11 +200,9 @@ def is_installable_file(path): def get_dist_metadata(dist): from email.parser import FeedParser - import pipenv.patched.pip._vendor.pkg_resources as pkg_resources + from pipenv.patched.pip._vendor.pkg_resources import DistInfoDistribution - if isinstance(dist, pkg_resources.DistInfoDistribution) and dist.has_metadata( - "METADATA" - ): + if isinstance(dist, DistInfoDistribution) and dist.has_metadata("METADATA"): metadata = dist.get_metadata("METADATA") elif dist.has_metadata("PKG-INFO"): metadata = dist.get_metadata("PKG-INFO")