Begin passing category into the resolver.

This commit is contained in:
Matt Davis
2022-09-11 03:22:18 -04:00
parent 19dd5e90c4
commit 301aabaeb9
3 changed files with 36 additions and 30 deletions
+2 -3
View File
@@ -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
+15 -5
View File
@@ -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,
)
+19 -22
View File
@@ -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: