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

67 lines
2.1 KiB
Python

import sys
import subprocess
import shutil
import logging
from safety.utils.pyapp_utils import get_path, get_env
logger = logging.getLogger(__name__)
def get_unwrapped_command(name: str) -> str:
"""
Find the true executable for a command, skipping wrappers/aliases/.bat files.
Args:
command: The command to resolve (e.g. 'pip', 'python')
Returns:
Path to the actual executable
"""
logger.debug(f"get_unwrapped_command called with name: {name}")
if sys.platform in ["win32"]:
for lookup_term in [f"{name}.exe", name]:
logger.debug(f"Windows platform detected, looking for: {lookup_term}")
where_result = subprocess.run(
["where.exe", lookup_term],
capture_output=True,
text=True,
env=get_env(),
)
logger.debug(f"where.exe returncode: {where_result.returncode}")
logger.debug(f"where.exe stdout: {where_result.stdout}")
logger.debug(f"where.exe stderr: {where_result.stderr}")
if where_result.returncode == 0:
for path in where_result.stdout.splitlines():
path = path.strip()
if not path:
continue
logger.debug(f"Checking path: {path}")
path_lower = path.lower()
if not path_lower.endswith((".exe", ".bat", ".cmd")):
logger.debug(f"Skipping non-executable path: {path}")
continue
if "\\safety\\" in path_lower and path_lower.endswith(
f"{name}.bat"
):
logger.debug(f"Skipping Safety wrapper: {path}")
continue
return path
logger.debug(
f"No unwrapped command found on Windows, returning bare name: {name}"
)
return name
fallback = shutil.which(name, path=get_path()) or name
logger.debug(f"Using fallback (shutil.which or name): {fallback}")
return fallback