summaryrefslogtreecommitdiffstats
path: root/third_party/python/pip/pip/_internal/utils/distutils_args.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/pip/pip/_internal/utils/distutils_args.py')
-rw-r--r--third_party/python/pip/pip/_internal/utils/distutils_args.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/third_party/python/pip/pip/_internal/utils/distutils_args.py b/third_party/python/pip/pip/_internal/utils/distutils_args.py
new file mode 100644
index 0000000000..2fd1862073
--- /dev/null
+++ b/third_party/python/pip/pip/_internal/utils/distutils_args.py
@@ -0,0 +1,43 @@
+from getopt import GetoptError, getopt
+from typing import Dict, List
+
+_options = [
+ "exec-prefix=",
+ "home=",
+ "install-base=",
+ "install-data=",
+ "install-headers=",
+ "install-lib=",
+ "install-platlib=",
+ "install-purelib=",
+ "install-scripts=",
+ "prefix=",
+ "root=",
+ "user",
+]
+
+
+def parse_distutils_args(args: List[str]) -> Dict[str, str]:
+ """Parse provided arguments, returning an object that has the matched arguments.
+
+ Any unknown arguments are ignored.
+ """
+ result = {}
+ for arg in args:
+ try:
+ parsed_opt, _ = getopt(args=[arg], shortopts="", longopts=_options)
+ except GetoptError:
+ # We don't care about any other options, which here may be
+ # considered unrecognized since our option list is not
+ # exhaustive.
+ continue
+
+ if not parsed_opt:
+ continue
+
+ option = parsed_opt[0]
+ name_from_parsed = option[0][2:].replace("-", "_")
+ value_from_parsed = option[1] or "true"
+ result[name_from_parsed] = value_from_parsed
+
+ return result