Skip to content

Commit

Permalink
Make sure user_supplied is propagated where needed
Browse files Browse the repository at this point in the history
  • Loading branch information
sbidoul committed May 16, 2020
1 parent c580d66 commit f113d45
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 13 deletions.
14 changes: 9 additions & 5 deletions src/pip/_internal/cli/req_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ def make_resolver(
"""
make_install_req = partial(
install_req_from_req_string,
user_supplied=False, # dependencies are not user supplied
isolated=options.isolated_mode,
use_pep517=use_pep517,
)
Expand Down Expand Up @@ -308,26 +309,29 @@ def get_requirements(
session=session):
req_to_add = install_req_from_parsed_requirement(
parsed_req,
user_supplied=False,
isolated=options.isolated_mode,
)
req_to_add.user_supplied = False
requirements.append(req_to_add)

for req in args:
req_to_add = install_req_from_line(
req, None, isolated=options.isolated_mode,
req,
comes_from=None,
user_supplied=True,
isolated=options.isolated_mode,
use_pep517=options.use_pep517,
)
req_to_add.user_supplied = True
requirements.append(req_to_add)

for req in options.editables:
req_to_add = install_req_from_editable(
req,
comes_from=None,
user_supplied=True,
isolated=options.isolated_mode,
use_pep517=options.use_pep517,
)
req_to_add.user_supplied = True
requirements.append(req_to_add)

# NOTE: options.require_hashes may be set if --require-hashes is True
Expand All @@ -337,10 +341,10 @@ def get_requirements(
finder=finder, options=options, session=session):
req_to_add = install_req_from_parsed_requirement(
parsed_req,
user_supplied=True,
isolated=options.isolated_mode,
use_pep517=options.use_pep517
)
req_to_add.user_supplied = True
requirements.append(req_to_add)

# If any requirement has hash options, enable hash checking.
Expand Down
4 changes: 4 additions & 0 deletions src/pip/_internal/operations/freeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,15 @@ def freeze(
line = line[len('--editable'):].strip().lstrip('=')
line_req = install_req_from_editable(
line,
comes_from=None,
user_supplied=False, # actually we don't know
isolated=isolated,
)
else:
line_req = install_req_from_line(
COMMENT_RE.sub('', line).strip(),
comes_from=None,
user_supplied=False, # actually we don't know
isolated=isolated,
)

Expand Down
28 changes: 22 additions & 6 deletions src/pip/_internal/req/constructors.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ def parse_req_from_editable(editable_req):

def install_req_from_editable(
editable_req, # type: str
comes_from=None, # type: Optional[Union[InstallRequirement, str]]
comes_from, # type: Optional[Union[InstallRequirement, str]]
user_supplied, # type: bool
use_pep517=None, # type: Optional[bool]
isolated=False, # type: bool
options=None, # type: Optional[Dict[str, Any]]
Expand All @@ -231,6 +232,7 @@ def install_req_from_editable(
return InstallRequirement(
parts.requirement,
comes_from=comes_from,
user_supplied=user_supplied,
editable=True,
link=parts.link,
constraint=constraint,
Expand Down Expand Up @@ -379,7 +381,8 @@ def with_source(text):

def install_req_from_line(
name, # type: str
comes_from=None, # type: Optional[Union[str, InstallRequirement]]
comes_from, # type: Optional[Union[str, InstallRequirement]]
user_supplied, # type: bool
use_pep517=None, # type: Optional[bool]
isolated=False, # type: bool
options=None, # type: Optional[Dict[str, Any]]
Expand All @@ -396,8 +399,13 @@ def install_req_from_line(
parts = parse_req_from_line(name, line_source)

return InstallRequirement(
parts.requirement, comes_from, link=parts.link, markers=parts.markers,
use_pep517=use_pep517, isolated=isolated,
parts.requirement,
comes_from=comes_from,
user_supplied=user_supplied,
link=parts.link,
markers=parts.markers,
use_pep517=use_pep517,
isolated=isolated,
install_options=options.get("install_options", []) if options else [],
global_options=options.get("global_options", []) if options else [],
hash_options=options.get("hashes", {}) if options else {},
Expand All @@ -408,7 +416,8 @@ def install_req_from_line(

def install_req_from_req_string(
req_string, # type: str
comes_from=None, # type: Optional[InstallRequirement]
comes_from, # type: Optional[InstallRequirement]
user_supplied, # type: bool
isolated=False, # type: bool
use_pep517=None # type: Optional[bool]
):
Expand All @@ -432,19 +441,25 @@ def install_req_from_req_string(
)

return InstallRequirement(
req, comes_from, isolated=isolated, use_pep517=use_pep517
req,
comes_from=comes_from,
user_supplied=user_supplied,
isolated=isolated,
use_pep517=use_pep517,
)


def install_req_from_parsed_requirement(
parsed_req, # type: ParsedRequirement
user_supplied, # type: bool
isolated=False, # type: bool
use_pep517=None # type: Optional[bool]
):
# type: (...) -> InstallRequirement
if parsed_req.is_editable:
req = install_req_from_editable(
parsed_req.requirement,
user_supplied=user_supplied,
comes_from=parsed_req.comes_from,
use_pep517=use_pep517,
constraint=parsed_req.constraint,
Expand All @@ -454,6 +469,7 @@ def install_req_from_parsed_requirement(
else:
req = install_req_from_line(
parsed_req.requirement,
user_supplied=user_supplied,
comes_from=parsed_req.comes_from,
use_pep517=use_pep517,
isolated=isolated,
Expand Down
3 changes: 2 additions & 1 deletion src/pip/_internal/req/req_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def __init__(
self,
req, # type: Optional[Requirement]
comes_from, # type: Optional[Union[str, InstallRequirement]]
user_supplied, # type: bool
editable=False, # type: bool
link=None, # type: Optional[Link]
markers=None, # type: Optional[Marker]
Expand Down Expand Up @@ -174,7 +175,7 @@ def __init__(
# User supplied requirement are explicitly requested for installation
# by the user via CLI arguments or requirements files, as opposed to,
# e.g. dependencies, extras or constraints.
self.user_supplied = False
self.user_supplied = user_supplied

# Set by the legacy resolver when the requirement has been downloaded
# TODO: This introduces a strong coupling between the resolver and the
Expand Down
3 changes: 3 additions & 0 deletions src/pip/_internal/resolution/resolvelib/candidates.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def make_install_req_from_link(link, parent):
line = link.url
ireq = install_req_from_line(
line,
user_supplied=parent.user_supplied,
comes_from=parent.comes_from,
use_pep517=parent.use_pep517,
isolated=parent.isolated,
Expand All @@ -68,6 +69,7 @@ def make_install_req_from_editable(link, parent):
assert parent.editable, "parent not editable"
return install_req_from_editable(
link.url,
user_supplied=parent.user_supplied,
comes_from=parent.comes_from,
use_pep517=parent.use_pep517,
isolated=parent.isolated,
Expand All @@ -91,6 +93,7 @@ def make_install_req_from_dist(dist, parent):
line = "{}=={}".format(project_name, dist.parsed_version)
ireq = install_req_from_line(
line,
user_supplied=parent.user_supplied,
comes_from=parent.comes_from,
use_pep517=parent.use_pep517,
isolated=parent.isolated,
Expand Down
4 changes: 3 additions & 1 deletion src/pip/_internal/resolution/resolvelib/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,9 @@ def make_requirement_from_install_req(self, ireq):

def make_requirement_from_spec(self, specifier, comes_from):
# type: (str, InstallRequirement) -> Requirement
ireq = self._make_install_req_from_spec(specifier, comes_from)
ireq = self._make_install_req_from_spec(
specifier, comes_from
)
return self.make_requirement_from_install_req(ireq)

def make_requires_python_requirement(self, specifier):
Expand Down

0 comments on commit f113d45

Please sign in to comment.