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

73 lines
2.0 KiB
Python

import os
import logging
from typing import Optional, Dict
logger = logging.getLogger(__name__)
def get_path() -> Optional[str]:
"""
Get the PATH environment variable with pyapp-related paths filtered out.
This is necessary when running as a pyapp binary to prevent the bundled
Python from interfering with system tools.
Returns:
str or None: The filtered PATH string (or original PATH if not in PYAPP environment),
or None if PATH is not set
"""
# If not in PYAPP environment, return original PATH
if "PYAPP" not in os.environ:
return os.environ.get("PATH")
# If PATH is not set, return None
if "PATH" not in os.environ:
return None
logger.debug(
"Binary environment detected, filtering internal Python path from PATH"
)
original_path = os.environ["PATH"]
path_parts = original_path.split(os.pathsep)
filtered_paths = []
removed_paths = []
for path in path_parts:
path_lower = path.lower()
if "pyapp" in path_lower and "safety" in path_lower:
removed_paths.append(path)
logger.debug(f"Removing internal Python path from PATH: {path}")
else:
filtered_paths.append(path)
if removed_paths:
filtered_path = os.pathsep.join(filtered_paths)
logger.info(f"Filtered {len(removed_paths)} internal Python path(s) from PATH")
logger.debug(
f"Original PATH entries: {len(path_parts)}, Filtered PATH entries: {len(filtered_paths)}"
)
return filtered_path
return original_path
def get_env() -> Dict[str, str]:
"""
Get a copy of the environment with pyapp-related paths filtered from PATH.
This is useful for subprocess calls to prevent the bundled Python from
interfering with system tools.
Returns:
dict: A copy of os.environ with filtered PATH
"""
env = os.environ.copy()
filtered_path = get_path()
if filtered_path is not None:
env["PATH"] = filtered_path
return env