Files

76 строки
1.9 KiB
Python

from pathlib import Path
import json
import os
DATA_DIR = Path(os.getenv('DEVCONSOLE_DATA_DIR', '/var/lib/devconsole'))
REGISTRY_FILE = DATA_DIR / 'projects_registry.json'
def load_projects():
if not REGISTRY_FILE.exists():
return []
try:
return json.loads(REGISTRY_FILE.read_text(encoding='utf-8'))
except Exception:
return []
def save_projects(projects: list[dict]) -> list[dict]:
REGISTRY_FILE.parent.mkdir(parents=True, exist_ok=True)
REGISTRY_FILE.write_text(
json.dumps(projects, ensure_ascii=False, indent=2),
encoding='utf-8'
)
return projects
def save_project(project: dict):
projects = load_projects()
existing_project = None
for item in projects:
if item.get('repo_url') == project.get('repo_url') or item.get('workspace') == project.get('workspace'):
existing_project = item
break
if existing_project:
merged = {**existing_project, **project}
projects = [merged if p is existing_project else p for p in projects]
else:
projects.append(project)
return save_projects(projects)
def find_project_by_workspace(workspace: str) -> dict | None:
for project in load_projects():
if project.get('workspace') == workspace:
return project
return None
def find_project_by_repo(repo_url: str) -> dict | None:
for project in load_projects():
if project.get('repo_url') == repo_url:
return project
return None
def update_project_settings(workspace: str, settings: dict) -> dict | None:
projects = load_projects()
updated = None
for index, project in enumerate(projects):
if project.get('workspace') == workspace:
merged = {**project, **settings}
projects[index] = merged
updated = merged
break
if updated is None:
return None
save_projects(projects)
return updated