Commit b90f510d authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

admin TUI first pass

parent b96c8b55
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -81,6 +81,21 @@ par l'utilisateur jacques. L'utilisateur comme le projet doivet exister préalab
    (venv) code/jama: uv run jama newjamaproject "mon projet"
    Projet "mon projet" créé avec le compte administrateur "admin_mon_projet" et la clef d'API "EOwy6laNTMBDUvH6pGuOvGdMEpYM2F9M"

### Interface d'administration en terminal

Une interface TUI permet d'administrer Jama depuis un terminal sans passer par
les méthodes RPC :

    uv run jama adminui

Elle permet notamment de gérer les projets, utilisateurs, rôles, permissions,
métadonnées, résultats de tâches, types de fichiers, snapshots, caches et le
fichier de configuration `$JAMA_VAR_DIR/env`.

L'interface est en français par défaut. Pour l'utiliser en anglais :

    uv run jama adminui --language en

### Snapshot et restauration d'un projet

Jama peut exporter un projet sous forme de snapshot réimportable. Le snapshot
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ dependencies = [
    "python-dotenv>=1.0.0",
    "pyvips>=2.2.1",
    "rich>=14.0.0",
    "textual>=6.0.0",
    "Unidecode>=1.3.4",
]

+1 −1
Original line number Diff line number Diff line
__version__ = "0.6.11"
__version__ = "0.7.0"
+3 −0
Original line number Diff line number Diff line
"""Administrative helpers shared by commands and the TUI."""

# Put non-resource-specific admin operations here so management commands stay thin.
+29 −0
Original line number Diff line number Diff line
from dataclasses import dataclass

from django.conf import settings
from django.core.cache import caches


@dataclass
class CacheClearResult:
    alias: str
    cleared: bool | None


def configured_cache_aliases() -> list[str]:
    return sorted(settings.CACHES)


def clear_cache_aliases(aliases: list[str] | None = None) -> list[CacheClearResult]:
    configured_aliases = set(settings.CACHES)
    selected_aliases = aliases or configured_cache_aliases()
    unknown_aliases = sorted(set(selected_aliases) - configured_aliases)
    if unknown_aliases:
        # Fail before clearing anything so command-line and TUI runs are all-or-none.
        raise ValueError(
            "Unknown cache alias(es): {}".format(", ".join(unknown_aliases))
        )
    return [
        CacheClearResult(alias=alias, cleared=caches[alias].clear())
        for alias in selected_aliases
    ]
Loading