Skip to content

Commit c40fb0e

Browse files
committed
refactor dependency_resolver.py to use click
1 parent 2c28e61 commit c40fb0e

File tree

2 files changed

+44
-30
lines changed

2 files changed

+44
-30
lines changed

python/pip_install/requirements.bzl

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,19 @@ def compile_pip_requirements(
8383
args = [
8484
loc.format(requirements_in),
8585
loc.format(requirements_txt),
86-
# String None is a placeholder for argv ordering.
87-
loc.format(requirements_linux) if requirements_linux else "None",
88-
loc.format(requirements_darwin) if requirements_darwin else "None",
89-
loc.format(requirements_windows) if requirements_windows else "None",
9086
"//%s:%s.update" % (native.package_name(), name),
91-
] + extra_args
87+
]
88+
89+
if requirements_linux:
90+
args.append("--requirements-linux={}".format(loc.format(requirements_linux)))
91+
92+
if requirements_darwin:
93+
args.append("--requirements-darwin={}".format(loc.format(requirements_darwin)))
94+
95+
if requirements_windows:
96+
args.append("--requirements-windows={}".format(loc.format(requirements_windows)))
97+
98+
args.extend(extra_args)
9299

93100
deps = [
94101
requirement("build"),

python/pip_install/tools/dependency_resolver/dependency_resolver.py

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import shutil
2020
import sys
2121
from pathlib import Path
22+
from typing import Optional, Tuple
2223

24+
import click
2325
import piptools.writer as piptools_writer
2426
from piptools.scripts.compile import cli
2527

@@ -77,24 +79,25 @@ def _locate(bazel_runfiles, file):
7779
return bazel_runfiles.Rlocation(file)
7880

7981

80-
if __name__ == "__main__":
81-
if len(sys.argv) < 4:
82-
print(
83-
"Expected at least two arguments: requirements_in requirements_out",
84-
file=sys.stderr,
85-
)
86-
sys.exit(1)
87-
88-
parse_str_none = lambda s: None if s == "None" else s
82+
@click.command(context_settings={"ignore_unknown_options": True})
83+
@click.argument("requirements_in")
84+
@click.argument("requirements_txt")
85+
@click.argument("update_target_label")
86+
@click.option("--requirements-linux")
87+
@click.option("--requirements-darwin")
88+
@click.option("--requirements-windows")
89+
@click.argument("extra_args", nargs=-1, type=click.UNPROCESSED)
90+
def main(
91+
requirements_in: str,
92+
requirements_txt: str,
93+
update_target_label: str,
94+
requirements_linux: Optional[str],
95+
requirements_darwin: Optional[str],
96+
requirements_windows: Optional[str],
97+
extra_args: Tuple[str, ...],
98+
) -> None:
8999
bazel_runfiles = runfiles.Create()
90100

91-
requirements_in = sys.argv.pop(1)
92-
requirements_txt = sys.argv.pop(1)
93-
requirements_linux = parse_str_none(sys.argv.pop(1))
94-
requirements_darwin = parse_str_none(sys.argv.pop(1))
95-
requirements_windows = parse_str_none(sys.argv.pop(1))
96-
update_target_label = sys.argv.pop(1)
97-
98101
requirements_file = _select_golden_requirements_file(
99102
requirements_txt=requirements_txt, requirements_linux=requirements_linux,
100103
requirements_darwin=requirements_darwin, requirements_windows=requirements_windows
@@ -128,6 +131,8 @@ def _locate(bazel_runfiles, file):
128131
os.environ["LC_ALL"] = "C.UTF-8"
129132
os.environ["LANG"] = "C.UTF-8"
130133

134+
argv = []
135+
131136
UPDATE = True
132137
# Detect if we are running under `bazel test`.
133138
if "TEST_TMPDIR" in os.environ:
@@ -136,8 +141,7 @@ def _locate(bazel_runfiles, file):
136141
# to the real user cache, Bazel sandboxing makes the file read-only
137142
# and we fail.
138143
# In theory this makes the test more hermetic as well.
139-
sys.argv.append("--cache-dir")
140-
sys.argv.append(os.environ["TEST_TMPDIR"])
144+
argv.append(f"--cache-dir={os.environ['TEST_TMPDIR']}")
141145
# Make a copy for pip-compile to read and mutate.
142146
requirements_out = os.path.join(
143147
os.environ["TEST_TMPDIR"], os.path.basename(requirements_file) + ".out"
@@ -153,15 +157,14 @@ def _locate(bazel_runfiles, file):
153157
os.environ["CUSTOM_COMPILE_COMMAND"] = update_command
154158
os.environ["PIP_CONFIG_FILE"] = os.getenv("PIP_CONFIG_FILE") or os.devnull
155159

156-
sys.argv.append("--generate-hashes")
157-
sys.argv.append("--output-file")
158-
sys.argv.append(requirements_file_relative if UPDATE else requirements_out)
159-
sys.argv.append(
160+
argv.append("--generate-hashes")
161+
argv.append(f"--output-file={requirements_file_relative if UPDATE else requirements_out}")
162+
argv.append(
160163
requirements_in_relative
161164
if Path(requirements_in_relative).exists()
162165
else resolved_requirements_in
163166
)
164-
print(sys.argv)
167+
argv.extend(extra_args)
165168

166169
if UPDATE:
167170
print("Updating " + requirements_file_relative)
@@ -177,7 +180,7 @@ def _locate(bazel_runfiles, file):
177180
resolved_requirements_file, requirements_file_tree
178181
)
179182
)
180-
cli()
183+
cli(argv)
181184
requirements_file_relative_path = Path(requirements_file_relative)
182185
content = requirements_file_relative_path.read_text()
183186
content = content.replace(absolute_path_prefix, "")
@@ -186,7 +189,7 @@ def _locate(bazel_runfiles, file):
186189
# cli will exit(0) on success
187190
try:
188191
print("Checking " + requirements_file)
189-
cli()
192+
cli(argv)
190193
print("cli() should exit", file=sys.stderr)
191194
sys.exit(1)
192195
except SystemExit as e:
@@ -220,3 +223,7 @@ def _locate(bazel_runfiles, file):
220223
file=sys.stderr,
221224
)
222225
sys.exit(1)
226+
227+
228+
if __name__ == "__main__":
229+
main()

0 commit comments

Comments
 (0)