feat(backend): enforce user-owned sessions
This commit is contained in:
@@ -9,6 +9,9 @@ from tht.cli.schema_cmd import _load_config_or_exit
|
||||
|
||||
session_app = typer.Typer(help="Sessioni (directory artefatti)")
|
||||
|
||||
preferences_app = typer.Typer(help="Preferenze private del principal corrente")
|
||||
session_app.add_typer(preferences_app, name="preferences")
|
||||
|
||||
|
||||
def session_repository(cfg):
|
||||
"""Configured persistence boundary for every workflow command."""
|
||||
@@ -17,6 +20,42 @@ def session_repository(cfg):
|
||||
return build_session_repository(cfg)
|
||||
|
||||
|
||||
@preferences_app.command("get")
|
||||
def preferences_get_cmd(
|
||||
json_out: bool = typer.Option(False, "--json", help="Emetti JSON puro."),
|
||||
config: Path = CONFIG_OPT,
|
||||
) -> None:
|
||||
"""Legge le preferenze private del principal risolto dal repository."""
|
||||
cfg = _load_config_or_exit(config)
|
||||
preferences = session_repository(cfg).get_preferences()
|
||||
if json_out:
|
||||
typer.echo(json.dumps(preferences, ensure_ascii=False, sort_keys=True))
|
||||
else:
|
||||
typer.echo(json.dumps(preferences, ensure_ascii=False, indent=2, sort_keys=True))
|
||||
|
||||
|
||||
@preferences_app.command("set")
|
||||
def preferences_set_cmd(
|
||||
preferences_json: str = typer.Argument(..., help="Oggetto JSON delle preferenze."),
|
||||
json_out: bool = typer.Option(False, "--json", help="Non emette testo al successo."),
|
||||
config: Path = CONFIG_OPT,
|
||||
) -> None:
|
||||
"""Sostituisce le preferenze private del principal risolto dal repository."""
|
||||
try:
|
||||
preferences = json.loads(preferences_json)
|
||||
except json.JSONDecodeError as exc:
|
||||
typer.secho(f"ERRORE: preferenze JSON non valide: {exc}", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=2) from None
|
||||
if not isinstance(preferences, dict):
|
||||
typer.secho("ERRORE: le preferenze devono essere un oggetto JSON", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=2)
|
||||
cfg = _load_config_or_exit(config)
|
||||
session_repository(cfg).set_preferences(preferences)
|
||||
if json_out:
|
||||
return
|
||||
typer.secho("OK: preferenze aggiornate.", fg=typer.colors.GREEN)
|
||||
|
||||
|
||||
def session_dir(cfg, session_id: str) -> Path:
|
||||
"""Legacy path bridge for out-of-scope datamart/memory compatibility only.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user