90 lines
2.6 KiB
Python
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
|