241 lines
5.4 KiB
Lua
241 lines
5.4 KiB
Lua
-- -*- coding: utf-8 -*-
|
|
-- preamble: common routines
|
|
|
|
local matchers = require("matchers")
|
|
local w = require("tables").wrap
|
|
|
|
local parser = clink.arg.new_parser
|
|
|
|
local function pip_libs_list(token)
|
|
local handle = io.popen('python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"')
|
|
local python_lib_path = handle:read("*a")
|
|
handle:close()
|
|
|
|
-- trim spaces
|
|
python_lib_path = python_lib_path:gsub("^%s*(.-)%s*$", "%1")
|
|
|
|
local finder = matchers.create_files_matcher(python_lib_path .. "\\*.dist-info")
|
|
|
|
local list = w(finder(token))
|
|
|
|
list =
|
|
list:map(
|
|
function(package)
|
|
package = package:gsub("-[%d%.]+dist%-info$", "")
|
|
return package
|
|
end
|
|
)
|
|
|
|
return list
|
|
end
|
|
|
|
local pip_default_flags = {
|
|
"--help",
|
|
"-h",
|
|
"--isolated",
|
|
"--verbose",
|
|
"-v",
|
|
"--version",
|
|
"-V",
|
|
"--quiet",
|
|
"-q",
|
|
"--log",
|
|
"--proxy",
|
|
"--retries",
|
|
"--timeout",
|
|
"--exists-action",
|
|
"--trusted-host",
|
|
"--cert",
|
|
"--client-cert",
|
|
"--cache-dir",
|
|
"--no-cache-dir",
|
|
"--disable-pip-version-check",
|
|
"--no-color"
|
|
}
|
|
|
|
local pip_requirement_flags = {
|
|
"--requirement" .. parser({clink.matches_are_files}),
|
|
"-r" .. parser({clink.matches_are_files})
|
|
}
|
|
|
|
local pip_index_flags = {
|
|
"--index-url",
|
|
"-i",
|
|
"--extra-index-url",
|
|
"--no-index",
|
|
"--find-links",
|
|
"-f"
|
|
}
|
|
|
|
local pip_install_download_wheel_flags = {
|
|
pip_requirement_flags,
|
|
"--no-binary",
|
|
"--only-binary",
|
|
"--prefer-binary",
|
|
"--no-build-isolation",
|
|
"--use-pep517",
|
|
"--constraint",
|
|
"-c",
|
|
"--src",
|
|
"--no-deps",
|
|
"--progress-bar" .. parser({"off", "on", "ascii", "pretty", "emoji"}),
|
|
"--global-option",
|
|
"--pre",
|
|
"--no-clean",
|
|
"--requires-hashes"
|
|
}
|
|
|
|
local pip_install_download_flags = {
|
|
pip_install_download_wheel_flags,
|
|
"--platform",
|
|
"--python-version",
|
|
"--implementation" .. parser({"pp", "jy", "cp", "ip"}),
|
|
"--abi"
|
|
}
|
|
|
|
local pip_install_parser =
|
|
parser(
|
|
{},
|
|
"--editable",
|
|
"-e",
|
|
"--target",
|
|
"-t",
|
|
"--user",
|
|
"--root",
|
|
"--prefix",
|
|
"--build",
|
|
"-b",
|
|
"--upgrade",
|
|
"-U",
|
|
"--upgrade-strategy" .. parser({"eager", "only-if-needed"}),
|
|
"--force-reinstall",
|
|
"--ignore-installed",
|
|
"-I",
|
|
"--ignore-requires-python",
|
|
"--install-option",
|
|
"--compile",
|
|
"--no-compile",
|
|
"--no-warn-script-location",
|
|
"--no-warn-conflicts"
|
|
):loop(1)
|
|
pip_install_parser:add_flags(pip_install_download_flags)
|
|
pip_install_parser:add_flags(pip_index_flags)
|
|
pip_install_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_download_parser = parser({}, "--build", "-b", "--dest", "-d"):loop(1)
|
|
pip_download_parser:add_flags(pip_install_download_flags)
|
|
pip_download_parser:add_flags(pip_index_flags)
|
|
pip_download_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_uninstall_parser =
|
|
parser({pip_libs_list}, "--yes", "-y"):add_flags(pip_default_flags, pip_requirement_flags):loop(1)
|
|
|
|
local pip_freeze_parser = parser({}, "--find-links", "--local", "-l", "--user", "--all", "--exclude-editable")
|
|
pip_freeze_parser:add_flags(pip_default_flags, pip_requirement_flags)
|
|
|
|
local pip_list_parser =
|
|
parser(
|
|
{},
|
|
"--outdated",
|
|
"-o",
|
|
"--uptodate",
|
|
"-u",
|
|
"--editable",
|
|
"-e",
|
|
"--local",
|
|
"-l",
|
|
"--user",
|
|
"--pre",
|
|
"--format" .. parser({"columns", "freeze", "json"}),
|
|
"--not-required",
|
|
"--exclude-editable",
|
|
"--include-editable"
|
|
)
|
|
pip_list_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_config_parser =
|
|
parser(
|
|
{
|
|
"list",
|
|
"edit",
|
|
"get",
|
|
"set",
|
|
"unset"
|
|
},
|
|
"--editor",
|
|
"--global",
|
|
"--user",
|
|
"--venv",
|
|
pip_default_flags
|
|
)
|
|
pip_config_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_search_parser = parser({}, "--index", "-i"):add_flags(pip_default_flags)
|
|
|
|
local pip_wheel_parser =
|
|
parser(
|
|
{},
|
|
"--wheel-dir",
|
|
"-w",
|
|
"--build-option",
|
|
"--editable",
|
|
"-e",
|
|
"--ignore-requires-python",
|
|
"--build",
|
|
"-b"
|
|
):loop(1)
|
|
pip_wheel_parser:add_flags(pip_install_download_flags)
|
|
pip_wheel_parser:add_flags(pip_index_flags)
|
|
pip_wheel_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_hash_parser =
|
|
parser(
|
|
{},
|
|
"--algorithm" .. parser({"sha256", "sha384", "sha512"}),
|
|
"-a" .. parser({"sha256", "sha384", "sha512"}),
|
|
pip_default_flags
|
|
)
|
|
pip_hash_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_completion_parser = parser({}, "--bash", "-b", "--zsh", "-z", "--fish", "-f"):add_flags(pip_default_flags)
|
|
|
|
local pip_help_parser =
|
|
parser(
|
|
{
|
|
"install",
|
|
"download",
|
|
"uninstall",
|
|
"freeze",
|
|
"list",
|
|
"show",
|
|
"config",
|
|
"search",
|
|
"wheel",
|
|
"hash",
|
|
"completion",
|
|
"help"
|
|
}
|
|
)
|
|
pip_help_parser:add_flags(pip_default_flags)
|
|
|
|
local pip_parser =
|
|
parser(
|
|
{
|
|
"install" .. pip_install_parser,
|
|
"download" .. pip_download_parser,
|
|
"uninstall" .. pip_uninstall_parser,
|
|
"freeze" .. pip_freeze_parser,
|
|
"list" .. pip_list_parser,
|
|
"show" .. parser({pip_libs_list}, pip_default_flags),
|
|
"config" .. pip_config_parser,
|
|
"search" .. pip_search_parser,
|
|
"wheel" .. pip_wheel_parser,
|
|
"hash" .. pip_hash_parser,
|
|
"completion" .. pip_completion_parser,
|
|
"help" .. pip_help_parser
|
|
}
|
|
)
|
|
pip_parser:add_flags(pip_default_flags)
|
|
|
|
clink.arg.register_parser("pip", pip_parser)
|