13
13
TypeStubsModuleMappingField ,
14
14
)
15
15
from pants .backend .python .pip_requirement import PipRequirement
16
+ from pants .backend .python .subsystems .setup import PythonSetup
16
17
from pants .backend .python .target_types import (
17
18
PythonRequirementModulesField ,
18
19
PythonRequirementResolveField ,
@@ -70,7 +71,9 @@ class GenerateFromPipenvRequirementsRequest(GenerateTargetsRequest):
70
71
# TODO(#10655): differentiate between Pipfile vs. Pipfile.lock.
71
72
@rule (desc = "Generate `python_requirement` targets from Pipfile.lock" , level = LogLevel .DEBUG )
72
73
async def generate_from_pipenv_requirement (
73
- request : GenerateFromPipenvRequirementsRequest , union_membership : UnionMembership
74
+ request : GenerateFromPipenvRequirementsRequest ,
75
+ union_membership : UnionMembership ,
76
+ python_setup : PythonSetup ,
74
77
) -> GeneratedTargets :
75
78
generator = request .generator
76
79
lock_rel_path = generator [PipenvSourceField ].value
@@ -90,6 +93,15 @@ async def generate_from_pipenv_requirement(
90
93
union_membership ,
91
94
)
92
95
96
+ req_deps = [file_tgt .address .spec ]
97
+
98
+ resolve = request .template .get (
99
+ PythonRequirementResolveField .alias , python_setup .default_resolve
100
+ )
101
+ lockfile = python_setup .resolves .get (resolve ) if python_setup .enable_resolves else None
102
+ if lockfile :
103
+ req_deps .append (f"{ lockfile } :{ resolve } " )
104
+
93
105
digest_contents = await Get (
94
106
DigestContents ,
95
107
PathGlobs (
@@ -106,9 +118,7 @@ def generate_tgt(parsed_req: PipRequirement) -> PythonRequirementTarget:
106
118
normalized_proj_name = canonicalize_project_name (parsed_req .project_name )
107
119
tgt_overrides = overrides .pop (normalized_proj_name , {})
108
120
if Dependencies .alias in tgt_overrides :
109
- tgt_overrides [Dependencies .alias ] = list (tgt_overrides [Dependencies .alias ]) + [
110
- file_tgt .address .spec
111
- ]
121
+ tgt_overrides [Dependencies .alias ] = list (tgt_overrides [Dependencies .alias ]) + req_deps
112
122
113
123
return PythonRequirementTarget (
114
124
{
@@ -120,7 +130,7 @@ def generate_tgt(parsed_req: PipRequirement) -> PythonRequirementTarget:
120
130
),
121
131
# This may get overridden by `tgt_overrides`, which will have already added in
122
132
# the file tgt.
123
- Dependencies .alias : [ file_tgt . address . spec ] ,
133
+ Dependencies .alias : req_deps ,
124
134
** tgt_overrides ,
125
135
},
126
136
request .template_address .create_generated (parsed_req .project_name ),
0 commit comments