Ship MicroPython stubs from repo lib/ and seed workspace lib on startup
Move machine.py and neopixel.py into a tracked /lib/ at the repo root and auto-copy them into WORKSPACE_ROOT/lib whenever files are missing, so empty volumes and fresh per-user workspaces always have the read-only stubs available to Jedi and Pyodide. Allow all users to browse lib/ in the UI (writes still gated by the API), and add tests covering initial seeding and re-population after the dir is wiped. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -16,6 +16,22 @@ _CANONICAL_DEMO_FILENAMES = (
|
||||
)
|
||||
|
||||
|
||||
def ensure_workspace_lib(workspace_root: Path | None = None) -> None:
|
||||
"""Copy shipped MicroPython stubs from the repo into WORKSPACE_ROOT/lib when each file is absent."""
|
||||
dst_root = (workspace_root or config.WORKSPACE_ROOT).resolve() / "lib"
|
||||
dst_root.mkdir(parents=True, exist_ok=True)
|
||||
src_root = config.PROJECT_ROOT.resolve() / "lib"
|
||||
if not src_root.is_dir():
|
||||
return
|
||||
for src in sorted(src_root.glob("*.py")):
|
||||
if not src.is_file():
|
||||
continue
|
||||
dst = dst_root / src.name
|
||||
if dst.exists():
|
||||
continue
|
||||
shutil.copy2(src, dst)
|
||||
|
||||
|
||||
def safe_workspace_leaf(username: str, user_id: int) -> str:
|
||||
base = re.sub(r"[^a-zA-Z0-9._-]+", "-", username.strip()).strip("-").lower() or "user"
|
||||
return f"{base}-{user_id}"
|
||||
|
||||
Reference in New Issue
Block a user