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

90 lines
2.6 KiB
Python

import configparser
import logging
from pathlib import Path
from dataclasses import dataclass
from typing import Optional
from safety_schemas.models import ProjectModel
PROJECT_CONFIG = ".safety-project.ini"
PROJECT_CONFIG_SECTION = "project"
PROJECT_CONFIG_ID = "id"
PROJECT_CONFIG_URL = "url"
PROJECT_CONFIG_NAME = "name"
logger = logging.getLogger(__name__)
@dataclass
class UnverifiedProjectModel:
"""
Data class representing an unverified project model.
"""
id: Optional[str]
project_path: Path
created: bool
name: Optional[str] = None
url_path: Optional[str] = None
def load_unverified_project_from_config(project_root: Path) -> UnverifiedProjectModel:
"""
Loads an unverified project from the configuration file located at the project root.
Args:
project_root (Path): The root directory of the project.
Returns:
UnverifiedProjectModel: An instance of UnverifiedProjectModel.
"""
config = configparser.ConfigParser()
project_path = project_root / PROJECT_CONFIG
config.read(project_path)
id = config.get(PROJECT_CONFIG_SECTION, PROJECT_CONFIG_ID, fallback=None)
url = config.get(PROJECT_CONFIG_SECTION, PROJECT_CONFIG_URL, fallback=None)
name = config.get(PROJECT_CONFIG_SECTION, PROJECT_CONFIG_NAME, fallback=None)
created = True
if not id:
created = False
return UnverifiedProjectModel(
id=id, url_path=url, name=name, project_path=project_path, created=created
)
def save_project_info(project: ProjectModel, project_path: Path) -> bool:
"""
Saves the project information to the configuration file.
Args:
project (ProjectModel): The ProjectModel object containing project
information.
project_path (Path): The path to the configuration file.
Returns:
bool: True if the project information was saved successfully, False
otherwise.
"""
config = configparser.ConfigParser()
config.read(project_path)
if PROJECT_CONFIG_SECTION not in config.sections():
config[PROJECT_CONFIG_SECTION] = {}
config[PROJECT_CONFIG_SECTION][PROJECT_CONFIG_ID] = project.id
if project.url_path:
config[PROJECT_CONFIG_SECTION][PROJECT_CONFIG_URL] = project.url_path
if project.name:
config[PROJECT_CONFIG_SECTION][PROJECT_CONFIG_NAME] = project.name
try:
with open(project_path, "w") as configfile:
config.write(configfile)
except Exception:
logger.exception("Error saving project info")
return False
return True