1919import shutil
2020import sys
2121from pathlib import Path
22+ from typing import Optional , Tuple
2223
24+ import click
2325import piptools .writer as piptools_writer
2426from 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,14 +157,13 @@ 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 ("--output-file" )
157- sys .argv .append (requirements_file_relative if UPDATE else requirements_out )
158- sys .argv .append (
160+ argv .append (f"--output-file={ requirements_file_relative if UPDATE else requirements_out } " )
161+ argv .append (
159162 requirements_in_relative
160163 if Path (requirements_in_relative ).exists ()
161164 else resolved_requirements_in
162165 )
163- print ( sys . argv )
166+ argv . extend ( extra_args )
164167
165168 if UPDATE :
166169 print ("Updating " + requirements_file_relative )
@@ -176,7 +179,7 @@ def _locate(bazel_runfiles, file):
176179 resolved_requirements_file , requirements_file_tree
177180 )
178181 )
179- cli ()
182+ cli (argv )
180183 requirements_file_relative_path = Path (requirements_file_relative )
181184 content = requirements_file_relative_path .read_text ()
182185 content = content .replace (absolute_path_prefix , "" )
@@ -185,7 +188,7 @@ def _locate(bazel_runfiles, file):
185188 # cli will exit(0) on success
186189 try :
187190 print ("Checking " + requirements_file )
188- cli ()
191+ cli (argv )
189192 print ("cli() should exit" , file = sys .stderr )
190193 sys .exit (1 )
191194 except SystemExit as e :
@@ -219,3 +222,7 @@ def _locate(bazel_runfiles, file):
219222 file = sys .stderr ,
220223 )
221224 sys .exit (1 )
225+
226+
227+ if __name__ == "__main__" :
228+ main ()
0 commit comments