diff --git a/api_routes.py b/api_routes.py index a0ab020..530241d 100644 --- a/api_routes.py +++ b/api_routes.py @@ -28,6 +28,7 @@ def register_api_routes(db: ProjectDB) -> None: app.add_api_route("/api/projects", _list_projects, methods=["GET"]) app.add_api_route("/api/active-project", _get_active_project, methods=["GET"]) + app.add_api_route("/api/projects/{name}", _get_project, methods=["GET"]) app.add_api_route("/api/projects/{name}/files", _list_files, methods=["GET"]) app.add_api_route("/api/projects/{name}/files/{file_name}/sequences", _list_sequences, methods=["GET"]) app.add_api_route("/api/projects/{name}/files/{file_name}/data", _get_data, methods=["GET"]) @@ -52,6 +53,15 @@ def _get_active_project() -> dict[str, Any]: return {"project": config.get("current_project", "")} +def _get_project(name: str) -> dict[str, Any]: + db = _get_db() + proj = db.get_project(name) + if not proj: + raise HTTPException(status_code=404, detail=f"Project '{name}' not found") + return {"name": proj["name"], "folder_path": proj["folder_path"], + "description": proj.get("description", "")} + + def _list_files(name: str) -> dict[str, Any]: db = _get_db() files = db.list_project_files(name) diff --git a/project_loader.py b/project_loader.py index 2dc2a40..577dd38 100644 --- a/project_loader.py +++ b/project_loader.py @@ -67,6 +67,13 @@ def _fetch_json(url: str) -> dict: return {"error": "parse_error", "message": str(e)} +def _fetch_project(manager_url: str, project: str) -> dict: + """Fetch project details (including folder_path) from the NiceGUI REST API.""" + p = urllib.parse.quote(project, safe='') + url = f"{manager_url.rstrip('/')}/api/projects/{p}" + return _fetch_json(url) + + def _fetch_data(manager_url: str, project: str, file: str, seq: int) -> dict: """Fetch sequence data from the NiceGUI REST API.""" p = urllib.parse.quote(project, safe='') @@ -221,14 +228,16 @@ class ProjectSource: }, } - RETURN_TYPES = ("INT", "STRING",) - RETURN_NAMES = ("sequence_number", "file_name",) + RETURN_TYPES = ("INT", "STRING", "STRING") + RETURN_NAMES = ("sequence_number", "file_name", "project_path") FUNCTION = "hold_config" CATEGORY = "JSON Manager/project" OUTPUT_NODE = True def hold_config(self, manager_url, project_name, file_name, sequence_number, label): - return (sequence_number, file_name,) + proj = _fetch_project(manager_url, project_name) + folder_path = proj.get("folder_path", "") if "error" not in proj else "" + return (sequence_number, file_name, folder_path) class ProjectKey: