Save only string personal doc paths (#1566)
This commit is contained in:
@@ -179,6 +179,11 @@ def retrieve_personal(personal_index: List[Dict], query: str, k: int = 5,
|
|||||||
# Fall back to keyword search
|
# Fall back to keyword search
|
||||||
return retrieve_personal_keyword(personal_index, query, k)
|
return retrieve_personal_keyword(personal_index, query, k)
|
||||||
|
|
||||||
|
|
||||||
|
def _string_list(values) -> list[str]:
|
||||||
|
return [value for value in values or [] if isinstance(value, str)]
|
||||||
|
|
||||||
|
|
||||||
class PersonalDocsManager:
|
class PersonalDocsManager:
|
||||||
"""Manager class for personal document indexing and retrieval."""
|
"""Manager class for personal document indexing and retrieval."""
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ class PersonalDocsManager:
|
|||||||
directories = json.load(f)
|
directories = json.load(f)
|
||||||
if not isinstance(directories, list):
|
if not isinstance(directories, list):
|
||||||
raise ValueError("indexed directories must be a list")
|
raise ValueError("indexed directories must be a list")
|
||||||
self.indexed_directories = [d for d in directories if isinstance(d, str)]
|
self.indexed_directories = _string_list(directories)
|
||||||
logger.info(f"Loaded {len(self.indexed_directories)} indexed directories")
|
logger.info(f"Loaded {len(self.indexed_directories)} indexed directories")
|
||||||
else:
|
else:
|
||||||
self.indexed_directories = []
|
self.indexed_directories = []
|
||||||
@@ -214,7 +219,7 @@ class PersonalDocsManager:
|
|||||||
"""Save the list of indexed directories to persistent storage."""
|
"""Save the list of indexed directories to persistent storage."""
|
||||||
try:
|
try:
|
||||||
with open(self.directories_file, 'w', encoding="utf-8") as f:
|
with open(self.directories_file, 'w', encoding="utf-8") as f:
|
||||||
json.dump(self.indexed_directories, f, indent=2)
|
json.dump(_string_list(self.indexed_directories), f, indent=2)
|
||||||
logger.info(f"Saved {len(self.indexed_directories)} indexed directories")
|
logger.info(f"Saved {len(self.indexed_directories)} indexed directories")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error saving directories: {e}")
|
logger.error(f"Error saving directories: {e}")
|
||||||
@@ -227,7 +232,7 @@ class PersonalDocsManager:
|
|||||||
excluded = json.load(f)
|
excluded = json.load(f)
|
||||||
if not isinstance(excluded, list):
|
if not isinstance(excluded, list):
|
||||||
raise ValueError("excluded files must be a list")
|
raise ValueError("excluded files must be a list")
|
||||||
self.excluded_files = {p for p in excluded if isinstance(p, str)}
|
self.excluded_files = set(_string_list(excluded))
|
||||||
else:
|
else:
|
||||||
self.excluded_files = set()
|
self.excluded_files = set()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -237,7 +242,7 @@ class PersonalDocsManager:
|
|||||||
def _save_excluded(self):
|
def _save_excluded(self):
|
||||||
try:
|
try:
|
||||||
with open(self._excluded_file, 'w', encoding="utf-8") as f:
|
with open(self._excluded_file, 'w', encoding="utf-8") as f:
|
||||||
json.dump(list(self.excluded_files), f)
|
json.dump(_string_list(self.excluded_files), f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error saving excluded files: {e}")
|
logger.error(f"Error saving excluded files: {e}")
|
||||||
|
|
||||||
|
|||||||
6
tests/test_personal_docs_lists.py
Normal file
6
tests/test_personal_docs_lists.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from src import personal_docs
|
||||||
|
|
||||||
|
|
||||||
|
def test_string_list_filters_non_strings():
|
||||||
|
assert personal_docs._string_list(["/tmp/a", None, 3, "/tmp/b"]) == ["/tmp/a", "/tmp/b"]
|
||||||
|
assert personal_docs._string_list(None) == []
|
||||||
Reference in New Issue
Block a user