Files
Hotel-Booking/Backend/venv/lib/python3.12/site-packages/safety/tool/uv/parser.py
Iliyan Angelov 62c1fe5951 updates
2025-12-01 06:50:10 +02:00

161 lines
3.2 KiB
Python

from typing import Dict, Union, Set
from ..base import ToolCommandLineParser
from ..intents import ToolIntentionType
UV_CACHE_FLAGS = {
"no-cache",
"n",
"refresh",
}
UV_PYTHON_FLAGS = {
"managed-python",
"no-managed-python",
"no-python-downloads",
}
UV_INDEX_FLAGS = {
"no-index",
}
UV_RESOLVER_FLAGS = {
"upgrade",
"U",
"no-sources",
}
UV_INSTALLER_FLAGS = {
"reinstall",
"compile-bytecode",
}
UV_BUILD_FLAGS = {
"no-build-isolation",
"no-build",
"no-binary",
}
UV_GLOBAL_FLAGS = {
"quiet",
"q",
"verbose",
"v",
"native-tls",
"offline",
"no-progress",
"no-config",
"help",
"h",
"version",
"V",
}
UV_PIP_INSTALL_FLAGS = {
"all-extras",
"no-deps",
"require-hashes",
"no-verify-hashes",
"system",
"break-system-packages",
"no-break-system-packages",
"no-build",
"exact",
"strict",
"dry-run",
"user",
}
UV_PIP_UNINSTALL_FLAGS = {
"system",
"break-system-packages",
"no-break-system-packages",
"dry-run",
}
UV_KNOWN_FLAGS: Dict[str, Set[str]] = {
"global": UV_GLOBAL_FLAGS
| UV_CACHE_FLAGS
| UV_PYTHON_FLAGS
| UV_INDEX_FLAGS
| UV_RESOLVER_FLAGS
| UV_INSTALLER_FLAGS
| UV_BUILD_FLAGS,
# 2-level commands
"add": {
# From `uv add --help`
"dev",
"editable",
"raw",
"no-sync",
"locked",
"frozen",
"active",
"workspace",
"no-workspace",
"no-install-project",
"no-install-workspace",
},
"remove": {
"dev",
"no-sync",
"active",
"locked",
"frozen",
},
"sync": {
"all-extras",
"no-dev",
"only-dev",
"no-default-groups",
"all-groups",
"no-editable",
"inexact",
"active",
"no-install-project",
"no-install-workspace",
"locked",
"frozen",
"dry-run",
"all-packages",
"check",
},
# 3-level pip commands
"pip.install": UV_PIP_INSTALL_FLAGS,
"pip.uninstall": UV_PIP_UNINSTALL_FLAGS,
}
class UvParser(ToolCommandLineParser):
def get_tool_name(self) -> str:
return "uv"
def get_command_hierarchy(self) -> Dict[str, Union[ToolIntentionType, Dict]]:
"""
Context for command hierarchy parsing
"""
return {
# 2-level commands
"add": ToolIntentionType.ADD_PACKAGE,
"remove": ToolIntentionType.REMOVE_PACKAGE,
"build": ToolIntentionType.BUILD_PROJECT,
"sync": ToolIntentionType.SYNC_PACKAGES,
# 3-level commands
"pip": {
"install": ToolIntentionType.ADD_PACKAGE,
"uninstall": ToolIntentionType.REMOVE_PACKAGE,
"download": ToolIntentionType.DOWNLOAD_PACKAGE,
"list": ToolIntentionType.LIST_PACKAGES,
},
}
def get_known_flags(self) -> Dict[str, Set[str]]:
"""
Define flags that DON'T take values for uv.
These were derived from `uv --help` and subcommand helps.
"""
return UV_KNOWN_FLAGS