fix: prevent source state writes in dry-run
This commit is contained in:
@@ -41,9 +41,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
|
||||
@@ -51,8 +57,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.
|
||||
@@ -68,6 +80,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.",
|
||||
@@ -192,6 +208,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,
|
||||
@@ -248,10 +268,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