From f4fe208b7fd57a15723ca831fadbed7b85138f0f Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sat, 12 Jul 2025 13:48:10 -0400 Subject: [PATCH] Add index caching to EntryManager --- src/password_manager/entry_management.py | 17 +++++++++++++++-- src/tests/test_entry_add.py | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/password_manager/entry_management.py b/src/password_manager/entry_management.py index 87404a4..23a015a 100644 --- a/src/password_manager/entry_management.py +++ b/src/password_manager/entry_management.py @@ -53,9 +53,18 @@ class EntryManager: self.index_file = self.fingerprint_dir / "seedpass_entries_db.json.enc" self.checksum_file = self.fingerprint_dir / "seedpass_entries_db_checksum.txt" + self._index_cache: dict | None = None + logger.debug(f"EntryManager initialized with index file at {self.index_file}") - def _load_index(self) -> Dict[str, Any]: + def clear_cache(self) -> None: + """Clear the cached index data.""" + self._index_cache = None + + def _load_index(self, force_reload: bool = False) -> Dict[str, Any]: + if not force_reload and self._index_cache is not None: + return self._index_cache + if self.index_file.exists(): try: data = self.vault.load_index() @@ -81,6 +90,7 @@ class EntryManager: entry.pop("words", None) entry.setdefault("tags", []) logger.debug("Index loaded successfully.") + self._index_cache = data return data except Exception as e: logger.error(f"Failed to load index: {e}") @@ -89,11 +99,14 @@ class EntryManager: logger.info( f"Index file '{self.index_file}' not found. Initializing new entries database." ) - return {"schema_version": LATEST_VERSION, "entries": {}} + data = {"schema_version": LATEST_VERSION, "entries": {}} + self._index_cache = data + return data def _save_index(self, data: Dict[str, Any]) -> None: try: self.vault.save_index(data) + self._index_cache = data logger.debug("Index saved successfully.") except Exception as e: logger.error(f"Failed to save index: {e}") diff --git a/src/tests/test_entry_add.py b/src/tests/test_entry_add.py index 8ea313d..1714da5 100644 --- a/src/tests/test_entry_add.py +++ b/src/tests/test_entry_add.py @@ -103,7 +103,7 @@ def test_legacy_entry_defaults_to_password(): data["entries"][str(index)].pop("type", None) enc_mgr.save_json_data(data, entry_mgr.index_file) - loaded = entry_mgr._load_index() + loaded = entry_mgr._load_index(force_reload=True) assert loaded["entries"][str(index)]["type"] == "password"