unify single user and multi user behaviour

This commit is contained in:
Davide Scaini
2026-04-09 08:58:35 +02:00
parent 2007f53580
commit 98c42dc443
25 changed files with 678 additions and 232 deletions
+11 -32
View File
@@ -70,10 +70,6 @@ def _ensure_npm(site: Path) -> None:
subprocess.run(["npm", "install"], cwd=site, check=True)
def _is_multiuser(data: Path) -> bool:
return (data / "instance.db").exists()
def _user_dirs(data: Path) -> list[Path]:
"""Return all per-user subdirectories (contain an activities/ dir)."""
return sorted(
@@ -86,21 +82,14 @@ def _merge_edits(data: Path, handle: str | None = None) -> None:
"""Run the sidecar merge step for one user or all users."""
from bincio.render.merge import merge_all
if _is_multiuser(data):
targets = [data / handle] if handle else _user_dirs(data)
total = 0
for user_dir in targets:
n = merge_all(user_dir)
total += n
console.print(f" [cyan]{user_dir.name}[/cyan]: {n} sidecar(s) merged")
if not total:
console.print("No sidecars found — _merged/ dirs mirror extracted data.")
else:
n = merge_all(data)
if n:
console.print(f"Merged [cyan]{n}[/cyan] sidecar edit(s) into _merged/")
else:
console.print("No sidecars found — _merged/ mirrors extracted data.")
targets = [data / handle] if handle else _user_dirs(data)
total = 0
for user_dir in targets:
n = merge_all(user_dir)
total += n
console.print(f" [cyan]{user_dir.name}[/cyan]: {n} sidecar(s) merged")
if not total:
console.print("No sidecars found — _merged/ dirs mirror extracted data.")
def _write_root_manifest(data: Path) -> None:
@@ -138,13 +127,8 @@ def _write_root_manifest(data: Path) -> None:
def _link_data(site: Path, data: Path) -> None:
"""Symlink site/public/data → data (multi-user) or data/_merged/ (single-user)."""
if _is_multiuser(data):
# Multi-user: link to data root directly (each user has their own _merged/)
target = data
else:
merged = data / "_merged"
target = merged if merged.exists() else data
"""Symlink site/public/data → data root (each user has their own _merged/)."""
target = data
public_data = site / "public" / "data"
public_data.parent.mkdir(parents=True, exist_ok=True)
if public_data.is_symlink():
@@ -193,14 +177,9 @@ def render(
console.print(f"Site: [cyan]{site}[/cyan]")
console.print(f"Data: [cyan]{data}[/cyan]")
multiuser = _is_multiuser(data)
if multiuser:
console.print("[cyan]Multi-user mode[/cyan]")
_ensure_npm(site)
_merge_edits(data, handle=handle)
if multiuser:
_write_root_manifest(data)
_write_root_manifest(data)
_link_data(site, data)
env = {**os.environ, "BINCIO_DATA_DIR": str(data)}