fix: prevent source state writes in dry-run
This commit is contained in:
@@ -38,9 +38,15 @@ class PronoteAuthState:
|
||||
|
||||
:param state_file: Chemin du fichier d'état JSON (``str`` ou
|
||||
:class:`~pathlib.Path`). ``".pronote_auth_state.json"`` par défaut.
|
||||
:param persistence_enabled: Si ``False``, charge l'état existant mais ne
|
||||
modifie jamais le fichier d'état. ``True`` par défaut.
|
||||
"""
|
||||
|
||||
def __init__(self, state_file: Path | str = ".pronote_auth_state.json") -> None:
|
||||
def __init__(
|
||||
self,
|
||||
state_file: Path | str = ".pronote_auth_state.json",
|
||||
persistence_enabled: bool = True,
|
||||
) -> None:
|
||||
"""Initialise le gestionnaire d'état d'authentification Pronote.
|
||||
|
||||
Le fichier d'état n'est pas créé à l'initialisation : il n'est écrit
|
||||
@@ -48,8 +54,14 @@ class PronoteAuthState:
|
||||
|
||||
:param state_file: Chemin du fichier d'état JSON (``str`` ou
|
||||
:class:`~pathlib.Path`). ``".pronote_auth_state.json"`` par défaut.
|
||||
:param persistence_enabled: Si ``False``, charge l'état existant mais
|
||||
désactive toutes les écritures ou suppressions sur disque. ``True``
|
||||
par défaut.
|
||||
"""
|
||||
self._state_file = Path(state_file)
|
||||
self._persistence_enabled = persistence_enabled
|
||||
self._in_memory_credentials: dict[str, str] | None = None
|
||||
self._in_memory_state_cleared = False
|
||||
|
||||
def load(self) -> dict[str, str] | None:
|
||||
"""Charge les credentials d'authentification depuis le fichier d'état.
|
||||
@@ -65,6 +77,10 @@ class PronoteAuthState:
|
||||
aucun état valide n'est disponible.
|
||||
:rtype: dict[str, str] | None
|
||||
"""
|
||||
if self._in_memory_state_cleared:
|
||||
return None
|
||||
if self._in_memory_credentials is not None:
|
||||
return self._in_memory_credentials.copy()
|
||||
if not self._state_file.exists():
|
||||
logger.debug(
|
||||
"Fichier d'état d'authentification Pronote %s absent, aucun token à charger.",
|
||||
@@ -126,6 +142,10 @@ class PronoteAuthState:
|
||||
:raises PronoteSyncError: Si l'écriture ou le remplacement du fichier
|
||||
échoue.
|
||||
"""
|
||||
if not self._persistence_enabled:
|
||||
self._in_memory_credentials = credentials.copy()
|
||||
self._in_memory_state_cleared = False
|
||||
return
|
||||
payload: dict[str, Any] = {
|
||||
"version": _STATE_VERSION,
|
||||
"credentials": credentials,
|
||||
@@ -182,10 +202,16 @@ class PronoteAuthState:
|
||||
"""Supprime le fichier d'état d'authentification.
|
||||
|
||||
Si le fichier n'existe pas, la méthode ne fait rien et aucune erreur
|
||||
n'est levée.
|
||||
n'est levée. Lorsque la persistance est désactivée, elle efface
|
||||
uniquement les credentials conservés en mémoire et ne modifie jamais
|
||||
le fichier d'état.
|
||||
|
||||
:raises OSError: Si la suppression du fichier existant échoue.
|
||||
"""
|
||||
self._in_memory_credentials = None
|
||||
if not self._persistence_enabled:
|
||||
self._in_memory_state_cleared = True
|
||||
return
|
||||
if not self._state_file.exists():
|
||||
return
|
||||
logger.debug(
|
||||
|
||||
Reference in New Issue
Block a user