From 301aabaeb9a4eb0fa38f9c431b43f832802bd73a Mon Sep 17 00:00:00 2001 From: Matt Davis Date: Sun, 11 Sep 2022 03:22:18 -0400 Subject: [PATCH] Begin passing category into the resolver. --- pipenv/project.py | 5 ++--- pipenv/resolver.py | 20 +++++++++++++++----- pipenv/utils/resolver.py | 41 +++++++++++++++++++--------------------- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/pipenv/project.py b/pipenv/project.py index b8df1754..bf91114d 100644 --- a/pipenv/project.py +++ b/pipenv/project.py @@ -591,11 +591,10 @@ class Project: def lockfile_content(self): return self.load_lockfile() - def get_editable_packages(self, dev=False): - section = "dev-packages" if dev else "packages" + def get_editable_packages(self, category): packages = { k: v - for k, v in self.parsed_pipfile.get(section, {}).items() + for k, v in self.parsed_pipfile.get(category, {}).items() if is_editable(v) } return packages diff --git a/pipenv/resolver.py b/pipenv/resolver.py index cfda8373..e5854609 100644 --- a/pipenv/resolver.py +++ b/pipenv/resolver.py @@ -75,6 +75,12 @@ def get_parser(): parser.add_argument("--clear", action="store_true", default=False) parser.add_argument("--verbose", "-v", action="count", default=False) parser.add_argument("--dev", action="store_true", default=False) + parser.add_argument( + "--category", + metavar="category", + action="store", + default=None, + ) parser.add_argument("--debug", action="store_true", default=False) parser.add_argument("--system", action="store_true", default=False) parser.add_argument("--parse-only", action="store_true", default=False) @@ -744,7 +750,9 @@ def parse_packages(packages, pre, clear, system, requirements_dir=None): print(json.dumps([])) -def resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages, dev): +def resolve_packages( + pre, clear, verbose, system, write, requirements_dir, packages, dev, category +): from pipenv.utils.internet import create_mirror_source, replace_pypi_sources from pipenv.utils.resolver import resolve_deps @@ -755,14 +763,14 @@ def resolve_packages(pre, clear, verbose, system, write, requirements_dir, packa ) def resolve( - packages, pre, project, sources, clear, system, dev, requirements_dir=None + packages, pre, project, sources, clear, system, category, requirements_dir=None ): return resolve_deps( packages, which, project=project, pre=pre, - dev=dev, + category=category, sources=sources, clear=clear, allow_global=system, @@ -781,7 +789,7 @@ def resolve_packages(pre, clear, verbose, system, write, requirements_dir, packa results, resolver = resolve( packages, pre=pre, - dev=dev, + category=category, project=project, sources=sources, clear=clear, @@ -816,6 +824,7 @@ def _main( packages, parse_only=False, dev=False, + category=None, ): os.environ["PIPENV_REQUESTED_PYTHON_VERSION"] = ".".join( [str(s) for s in sys.version_info[:3]] @@ -831,7 +840,7 @@ def _main( ) else: resolve_packages( - pre, clear, verbose, system, write, requirements_dir, packages, dev + pre, clear, verbose, system, write, requirements_dir, packages, dev, category ) @@ -860,6 +869,7 @@ def main(argv=None): parsed.packages, parse_only=parsed.parse_only, dev=parsed.dev, + category=parsed.category, ) diff --git a/pipenv/utils/resolver.py b/pipenv/utils/resolver.py index c0889126..9c825d45 100644 --- a/pipenv/utils/resolver.py +++ b/pipenv/utils/resolver.py @@ -133,7 +133,7 @@ class Resolver: skipped=None, clear=False, pre=False, - dev=False, + category=None, ): self.initial_constraints = constraints self.req_dir = req_dir @@ -143,7 +143,7 @@ class Resolver: self.hashes = {} self.clear = clear self.pre = pre - self.dev = dev + self.category = category self.results = None self.markers_lookup = markers_lookup if markers_lookup is not None else {} self.index_lookup = index_lookup if index_lookup is not None else {} @@ -206,16 +206,6 @@ class Resolver: markers_lookup = {} if not req_dir: req_dir = create_tracked_tempdir(prefix="pipenv-", suffix="-reqdir") - transient_resolver = Resolver( - [], - req_dir, - project, - sources, - index_lookup=index_lookup, - markers_lookup=markers_lookup, - clear=clear, - pre=pre, - ) for dep in deps: if not dep: continue @@ -323,7 +313,7 @@ class Resolver: # TODO: this is way too complex, refactor this constraints: Set[str] = set() locked_deps: Dict[str, Dict[str, Union[str, bool, List[str]]]] = {} - editable_packages = self.project.get_editable_packages(dev=self.dev) + editable_packages = self.project.get_editable_packages(category=self.category) if (req.is_file_or_url or req.is_vcs) and not req.is_wheel: # for local packages with setup.py files and potential direct url deps: if req.is_vcs: @@ -437,7 +427,7 @@ class Resolver: req_dir: str = None, clear: bool = False, pre: bool = False, - dev: bool = False, + category: str = None, ) -> "Resolver": if not req_dir: @@ -457,7 +447,7 @@ class Resolver: markers_lookup=markers_lookup, clear=clear, pre=pre, - dev=dev, + category=category, ) constraints, skipped, index_lookup, markers_lookup = resolver.get_metadata( deps, @@ -646,7 +636,7 @@ class Resolver: for c in self.parsed_constraints ] # Only use default_constraints when installing dev-packages - if self.dev: + if self.category != "packages": self._constraints += self.default_constraints self._constraints.sort(key=lambda ireq: ireq.name) return self._constraints @@ -882,16 +872,23 @@ def actually_resolve_deps( sources, clear, pre, - dev, + category, req_dir=None, ): if not req_dir: req_dir = create_tracked_tempdir(suffix="-requirements", prefix="pipenv-") - warning_list = [] with warnings.catch_warnings(record=True) as warning_list: resolver = Resolver.create( - deps, project, index_lookup, markers_lookup, sources, req_dir, clear, pre, dev + deps, + project, + index_lookup, + markers_lookup, + sources, + req_dir, + clear, + pre, + category, ) resolver.resolve() hashes = resolver.resolve_hashes() @@ -1080,7 +1077,7 @@ def resolve_deps( python=False, clear=False, pre=False, - dev=False, + category=None, allow_global=False, req_dir=None, ): @@ -1111,7 +1108,7 @@ def resolve_deps( sources, clear, pre, - dev, + category, req_dir=req_dir, ) except RuntimeError: @@ -1140,7 +1137,7 @@ def resolve_deps( sources, clear, pre, - dev, + category, req_dir=req_dir, ) except RuntimeError: