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

99 lines
2.9 KiB
Python

from typing import Dict, List, Optional, Any
from pydantic import BaseModel, Field
from safety.cli_util import CommandType, FeatureType
from safety.constants import CONTEXT_COMMAND_TYPE, CONTEXT_FEATURE_TYPE
class ContextSettingsModel(BaseModel):
"""
Model for command context settings.
"""
allow_extra_args: bool = Field(default=True)
ignore_unknown_options: bool = Field(default=True)
command_type: CommandType = Field(default=CommandType.BETA)
feature_type: FeatureType = Field(default=FeatureType.FIREWALL)
help_option_names: List[str] = Field(default=["--safety-help"])
def as_dict(self) -> Dict[str, Any]:
"""
Convert to dictionary format expected by Typer.
Returns:
Dict[str, Any]: Dictionary representation of the context settings
"""
result = {
"allow_extra_args": self.allow_extra_args,
"ignore_unknown_options": self.ignore_unknown_options,
CONTEXT_COMMAND_TYPE: self.command_type,
CONTEXT_FEATURE_TYPE: self.feature_type,
"help_option_names": self.help_option_names,
}
return result
class CommandSettingsModel(BaseModel):
"""
Model for command settings used in the Typer decorator.
"""
help: str
name: str
options_metavar: str = Field(default="[OPTIONS]")
context_settings: ContextSettingsModel = Field(default_factory=ContextSettingsModel)
class ToolCommandModel(BaseModel):
"""
Model for a tool command definition.
"""
name: str
display_name: str
help: str
# Path to custom Typer app if available
custom_app: Optional[str] = None
# Custom command settings for the tool
command_settings: Optional[CommandSettingsModel] = None
def get_command_settings(self) -> CommandSettingsModel:
"""
Get command settings, using defaults if not specified.
Returns:
CommandSettingsModel: Command settings with defaults
"""
if self.command_settings:
return self.command_settings
return CommandSettingsModel(
help=self.help,
name=self.display_name,
)
# Tool definitions
TOOLS = [
ToolCommandModel(
name="poetry",
display_name="poetry",
help="[BETA] Run poetry commands protected by Safety firewall.\nExample: safety poetry add httpx",
),
ToolCommandModel(
name="pip",
display_name="pip",
help="[BETA] Run pip commands protected by Safety firewall.\nExample: safety pip list",
),
ToolCommandModel(
name="uv",
display_name="uv",
help="[BETA] Run uv commands protected by Safety firewall.\nExample: safety uv pip list",
),
ToolCommandModel(
name="npm",
display_name="npm",
help="[BETA] Run npm commands protected by Safety firewall.\nExample: safety npm list",
),
]