[FIX] kdbx : ouvrir le coffre sans tkinter, donc sur un serveur
Sur une machine sans tkinter — tout serveur — `get_kdbx()` rendait None en journalisant « pykeepass is not installed », alors que pykeepass était là. Les deux imports partageaient un seul `try` : l'absence de tkinter mettait aussi `PyKeePass` à None, et le coffre restait inouvrable même avec chemin et mot de passe configurés. tkinter ne sert qu'au sélecteur de fichier, quand aucun chemin n'est configuré ; deux blocs séparés le rendent à ce seul rôle. --- EN --- On a machine without tkinter — every server — `get_kdbx()` returned None while logging "pykeepass is not installed", though pykeepass was present. Both imports shared one `try`: a missing tkinter set `PyKeePass` to None as well, and the vault stayed unopenable even with path and password configured. tkinter serves only the file picker, when no path is configured; two separate blocks give it back that single role. Assisted-by: Claude Opus 5
This commit is contained in:
parent
890cd3944f
commit
cedf702226
1 changed files with 13 additions and 5 deletions
|
|
@ -9,22 +9,30 @@ from script.todo.todo_i18n import t
|
|||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
# DEUX blocs, et c'est le point : tkinter ne sert QU'au sélecteur de fichier
|
||||
# quand aucun chemin n'est configuré. Réunis dans un seul `try`, l'absence de
|
||||
# tkinter mettait aussi `PyKeePass` à None — et le coffre devenait impossible
|
||||
# à ouvrir sur toute machine sans interface graphique, chemin et mot de passe
|
||||
# configurés ou non. C'est-à-dire sur tous les serveurs.
|
||||
try:
|
||||
import tkinter as tk
|
||||
from tkinter import filedialog
|
||||
|
||||
from pykeepass import PyKeePass
|
||||
from pykeepass.exceptions import CredentialsError
|
||||
except ModuleNotFoundError:
|
||||
PyKeePass = None
|
||||
tk = None
|
||||
filedialog = None
|
||||
|
||||
class CredentialsError(Exception):
|
||||
"""Jamais levée ici : sans pykeepass, `get_kdbx` sort avant d'ouvrir
|
||||
quoi que ce soit. Définie pour que le `except` reste écrivable."""
|
||||
|
||||
|
||||
try:
|
||||
import tkinter as tk
|
||||
from tkinter import filedialog
|
||||
except ModuleNotFoundError:
|
||||
tk = None
|
||||
filedialog = None
|
||||
|
||||
|
||||
class KdbxManager:
|
||||
def __init__(self, config_file) -> None:
|
||||
self._config_file = config_file
|
||||
|
|
|
|||
Loading…
Reference in a new issue