Skip to content

Commit 74fd521

Browse files
committed
refactor dependency_resolver.py to use click
1 parent 9528806 commit 74fd521

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
@@ -80,12 +80,19 @@ def compile_pip_requirements(
8080
args = [
8181
loc.format(requirements_in),
8282
loc.format(requirements_txt),
83-
# String None is a placeholder for argv ordering.
84-
loc.format(requirements_linux) if requirements_linux else "None",
85-
loc.format(requirements_darwin) if requirements_darwin else "None",
86-
loc.format(requirements_windows) if requirements_windows else "None",
8783
"//%s:%s.update" % (native.package_name(), name),
88-
] + extra_args
84+
]
85+
86+
if requirements_linux:
87+
args.append("--requirements-linux={}".format(loc.format(requirements_linux)))
88+
89+
if requirements_darwin:
90+
args.append("--requirements-darwin={}".format(loc.format(requirements_darwin)))
91+
92+
if requirements_windows:
93+
args.append("--requirements-windows={}".format(loc.format(requirements_windows)))
94+
95+
args.extend(extra_args)
8996

9097
deps = [
9198
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
resolved_requirements_in = _locate(bazel_runfiles, requirements_in)
99102
resolved_requirements_txt = _locate(bazel_runfiles, requirements_txt)
100103

@@ -123,6 +126,8 @@ def _locate(bazel_runfiles, file):
123126
os.environ["LC_ALL"] = "C.UTF-8"
124127
os.environ["LANG"] = "C.UTF-8"
125128

129+
argv = []
130+
126131
UPDATE = True
127132
# Detect if we are running under `bazel test`.
128133
if "TEST_TMPDIR" in os.environ:
@@ -131,8 +136,7 @@ def _locate(bazel_runfiles, file):
131136
# to the real user cache, Bazel sandboxing makes the file read-only
132137
# and we fail.
133138
# In theory this makes the test more hermetic as well.
134-
sys.argv.append("--cache-dir")
135-
sys.argv.append(os.environ["TEST_TMPDIR"])
139+
argv.append(f"--cache-dir={os.environ['TEST_TMPDIR']}")
136140
# Make a copy for pip-compile to read and mutate.
137141
requirements_out = os.path.join(
138142
os.environ["TEST_TMPDIR"], os.path.basename(requirements_txt) + ".out"
@@ -148,15 +152,14 @@ def _locate(bazel_runfiles, file):
148152
os.environ["CUSTOM_COMPILE_COMMAND"] = update_command
149153
os.environ["PIP_CONFIG_FILE"] = os.getenv("PIP_CONFIG_FILE") or os.devnull
150154

151-
sys.argv.append("--generate-hashes")
152-
sys.argv.append("--output-file")
153-
sys.argv.append(requirements_txt_relative if UPDATE else requirements_out)
154-
sys.argv.append(
155+
argv.append("--generate-hashes")
156+
argv.append(f"--output-file={requirements_txt_relative if UPDATE else requirements_out}")
157+
argv.append(
155158
requirements_in_relative
156159
if Path(requirements_in_relative).exists()
157160
else resolved_requirements_in
158161
)
159-
print(sys.argv)
162+
argv.extend(extra_args)
160163

161164
if UPDATE:
162165
print("Updating " + requirements_txt_relative)
@@ -172,7 +175,7 @@ def _locate(bazel_runfiles, file):
172175
resolved_requirements_txt, requirements_txt_tree
173176
)
174177
)
175-
cli()
178+
cli(argv)
176179
requirements_txt_relative_path = Path(requirements_txt_relative)
177180
content = requirements_txt_relative_path.read_text()
178181
content = content.replace(absolute_path_prefix, "")
@@ -181,7 +184,7 @@ def _locate(bazel_runfiles, file):
181184
# cli will exit(0) on success
182185
try:
183186
print("Checking " + requirements_txt)
184-
cli()
187+
cli(argv)
185188
print("cli() should exit", file=sys.stderr)
186189
sys.exit(1)
187190
except SystemExit as e:
@@ -221,3 +224,7 @@ def _locate(bazel_runfiles, file):
221224
file=sys.stderr,
222225
)
223226
sys.exit(1)
227+
228+
229+
if __name__ == "__main__":
230+
main()

0 commit comments

Comments
 (0)