mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-21 04:02:22 +02:00
30 lines
901 B
Python
30 lines
901 B
Python
"""Shared low-level bits for the publish pipeline (scan / build / cloud). Kept
|
|
tiny and dependency-light so scan, build, and cloud_client can all lean on it
|
|
without reaching sideways into each other."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import re
|
|
|
|
from backend.apps.outputs.models import Output
|
|
from backend.config.paths import OUTPUTS_WORKSPACE_DIR
|
|
|
|
|
|
class PublishError(Exception):
|
|
"""User-facing publish failure; message is safe to show in a toast."""
|
|
|
|
|
|
def slugify(name: str) -> str:
|
|
"""A url-safe slug hint from the app name; the cloud guarantees uniqueness."""
|
|
s = re.sub(r"[^a-z0-9]+", "-", (name or "app").lower()).strip("-")
|
|
s = s[:32].strip("-")
|
|
return s or "app"
|
|
|
|
|
|
def is_webapp(output: Output) -> bool:
|
|
return bool(output.workspace_id)
|
|
|
|
|
|
def workspace_dir(output: Output) -> str:
|
|
return os.path.join(OUTPUTS_WORKSPACE_DIR, output.workspace_id or "")
|