Source code for scitex_app.appmaker._publish

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Publish a SciTeX app to the cloud server."""

from __future__ import annotations

import json
from pathlib import Path


[docs] def publish(app_dir: str | Path, server_url: str, token: str) -> dict: """Validate locally then submit the app for review via JWT endpoint. Parameters ---------- app_dir : path Directory containing the app with manifest.json. server_url : str Base URL of the SciTeX Cloud server (e.g. http://127.0.0.1:8000). token : str JWT access token (Bearer auth). Returns ------- dict Server response with 'success' and 'pr_url' keys. """ import requests from ._validate import validate app_path = Path(app_dir).resolve() # Local validation first errors = validate(str(app_path)) if errors: return {"success": False, "errors": errors} # Read manifest manifest_path = app_path / "manifest.json" if not manifest_path.is_file(): return {"success": False, "errors": ["manifest.json not found"]} with open(manifest_path, encoding="utf-8") as f: manifest = json.load(f) project_name = manifest.get("name", app_path.name) # Submit via JWT-authenticated endpoint # Route: apps/store/api/<module_name>/submit/ url = f"{server_url.rstrip('/')}/apps/store/api/{project_name}/submit/" headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json", } payload = { "project_name": project_name, "manifest": manifest, } resp = requests.post(url, headers=headers, json=payload, timeout=30) return resp.json()
# EOF