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

76 lines
2.2 KiB
Python

import os
from pathlib import Path
from typing import Optional, Tuple
import typer
from safety.scan.models import ScanExport, ScanOutput
from safety_schemas.models import AuthenticationType
MISSING_SPDX_EXTENSION_MSG = "spdx extra is not installed, please install it with: pip install safety[spdx]"
def raise_if_not_spdx_extension_installed() -> None:
"""
Raises an error if the spdx extension is not installed.
"""
try:
import spdx_tools.spdx
except Exception as e:
raise typer.BadParameter(MISSING_SPDX_EXTENSION_MSG)
def save_as_callback(save_as: Optional[Tuple[ScanExport, Path]]) -> Tuple[Optional[str], Optional[Path]]:
"""
Callback function to handle save_as parameter and validate if spdx extension is installed.
Args:
save_as (Optional[Tuple[ScanExport, Path]]): The export type and path.
Returns:
Tuple[Optional[str], Optional[Path]]: The validated export type and path.
"""
export_type, export_path = save_as if save_as else (None, None)
if ScanExport.is_format(export_type, ScanExport.SPDX):
raise_if_not_spdx_extension_installed()
return (export_type.value, export_path) if export_type and export_path else (export_type, export_path)
def output_callback(output: ScanOutput) -> str:
"""
Callback function to handle output parameter and validate if spdx extension is installed.
Args:
output (ScanOutput): The output format.
Returns:
str: The validated output format.
"""
if ScanOutput.is_format(output, ScanExport.SPDX):
raise_if_not_spdx_extension_installed()
return output.value
def fail_if_not_allowed_stage(ctx: typer.Context):
"""
Fail the command if the authentication type is not allowed in the current stage.
Args:
ctx (typer.Context): The context of the Typer command.
"""
if ctx.resilient_parsing:
return
stage = ctx.obj.auth.stage
auth_type: AuthenticationType = ctx.obj.auth.client.get_authentication_type()
if os.getenv("SAFETY_DB_DIR"):
return
if not auth_type.is_allowed_in(stage):
raise typer.BadParameter(f"'{auth_type.value}' auth type isn't allowed with " \
f"the '{stage}' stage.")