Source code for scitex_hub.project

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File: src/scitex_hub/project/__init__.py
"""SciTeX Hub project management.

Project CRUD (Python API):
    from scitex_hub.project import project_list, project_create

    projects = project_list()
    new = project_create("my-project", description="My research")

Sandboxed file-operation handlers (async, used by MCP tools) live in
:mod:`scitex_hub.project._mcp.handlers`.
"""

from __future__ import annotations

from .._mcp_tools.api import _make_request


[docs] def project_list() -> list[dict]: """List all projects owned by the authenticated user. Returns: List of project dicts with id, name, description, created_at, updated_at. """ result = _make_request("GET", "/api/v1/projects/") if result.get("success"): return result.get("projects", []) raise RuntimeError(result.get("error", "Failed to list projects"))
[docs] def project_create( name: str, description: str = "", template: str = "scitex_minimal", ) -> dict: """Create a new SciTeX Hub project. Args: name: Project name. description: Optional description. template: Template ID (default: scitex_minimal). Returns: Dict with project_id, name, success. """ result = _make_request( "POST", "/api/v1/projects/create/", data={"name": name, "description": description, "template": template}, ) if result.get("success"): return result raise RuntimeError(result.get("error", "Failed to create project"))
[docs] def project_delete(slug: str) -> bool: """Delete a project by slug. Args: slug: Project slug (URL-safe name). Returns: True if deleted successfully. """ result = _make_request("DELETE", f"/api/v1/projects/{slug}/") if result.get("success"): return True raise RuntimeError(result.get("error", "Failed to delete project"))
[docs] def project_rename(slug: str, new_name: str) -> dict: """Rename a project. Args: slug: Current project slug. new_name: New project name. Returns: Dict with updated project info. """ result = _make_request( "POST", f"/api/v1/projects/{slug}/rename/", data={"name": new_name}, ) if result.get("success"): return result raise RuntimeError(result.get("error", "Failed to rename project"))
# EOF