diff --git a/src/basic_memory/cli/commands/sync.py b/src/basic_memory/cli/commands/sync.py index d4937bc0..70ac6eaf 100644 --- a/src/basic_memory/cli/commands/sync.py +++ b/src/basic_memory/cli/commands/sync.py @@ -31,7 +31,6 @@ from basic_memory.services.link_resolver import LinkResolver from basic_memory.services.search_service import SearchService from basic_memory.sync import SyncService, FileChangeScanner from basic_memory.sync.utils import SyncReport -from conftest import markdown_processor console = Console() @@ -48,6 +47,10 @@ async def get_sync_service(db_type=DatabaseType.FILESYSTEM): engine, session_maker, ): + entity_parser = EntityParser(config.home) + markdown_processor = MarkdownProcessor(entity_parser) + file_service = FileService(config.home, markdown_processor) + # Initialize repositories entity_repository = EntityRepository(session_maker) observation_repository = ObservationRepository(session_maker) @@ -55,15 +58,12 @@ async def get_sync_service(db_type=DatabaseType.FILESYSTEM): search_repository = SearchRepository(session_maker) # Initialize services - search_service = SearchService(search_repository, entity_repository) + search_service = SearchService(search_repository, entity_repository, file_service) link_resolver = LinkResolver(entity_repository, search_service) # Initialize scanner file_change_scanner = FileChangeScanner(entity_repository) - entity_parser = EntityParser(config.home) - markdown_processor = MarkdownProcessor(entity_parser) - file_service = FileService(config.home, markdown_processor) # Initialize services entity_service = EntityService( diff --git a/src/basic_memory/sync/file_change_scanner.py b/src/basic_memory/sync/file_change_scanner.py index ed4a6418..7125897f 100644 --- a/src/basic_memory/sync/file_change_scanner.py +++ b/src/basic_memory/sync/file_change_scanner.py @@ -2,14 +2,14 @@ from dataclasses import dataclass, field from pathlib import Path -from typing import Dict, Sequence, Optional +from typing import Dict, Sequence from loguru import logger from basic_memory.file_utils import compute_checksum from basic_memory.models import Entity from basic_memory.repository.entity_repository import EntityRepository -from basic_memory.sync.utils import SyncReport, FileChange +from basic_memory.sync.utils import SyncReport @dataclass @@ -87,19 +87,13 @@ class FileChangeScanner: return result async def find_changes( - self, - db_file_state: Dict[str, FileState], - directory: Optional[Path] = None, + self, directory: Path, db_file_state: Dict[str, FileState] ) -> SyncReport: """Find changes between filesystem and database.""" # Get current files and checksums - - # scan the directory provided scan_result = await self.scan_directory(directory) - - # the set of all of the current files and their checksums current_files = scan_result.files - + # Build report report = SyncReport() @@ -163,6 +157,5 @@ class FileChangeScanner: async def find_knowledge_changes(self, directory: Path) -> SyncReport: """Find changes in knowledge directory.""" - db_file_state = await self.get_db_file_state(await self.entity_repository.find_all()) return await self.find_changes(directory=directory, db_file_state=db_file_state) diff --git a/src/basic_memory/sync/sync_service.py b/src/basic_memory/sync/sync_service.py index fb7ae0b5..273d5187 100644 --- a/src/basic_memory/sync/sync_service.py +++ b/src/basic_memory/sync/sync_service.py @@ -1,7 +1,7 @@ """Service for syncing files between filesystem and database.""" from pathlib import Path -from typing import Dict, Optional +from typing import Dict from loguru import logger @@ -10,8 +10,7 @@ from basic_memory.repository import EntityRepository, RelationRepository from basic_memory.services import EntityService from basic_memory.services.search_service import SearchService from basic_memory.sync import FileChangeScanner -from basic_memory.sync.utils import SyncReport, FileChange -from watchfiles import Change +from basic_memory.sync.utils import SyncReport class SyncService: @@ -62,7 +61,7 @@ class SyncService: logger.debug(f"No entity found to delete: {file_path}") async def sync(self, directory: Path) -> SyncReport: - """Sync knowledge files with database.""" + """Sync knowledge files with database.""" changes = await self.scanner.find_knowledge_changes(directory) logger.info(f"Found {changes.total_changes} knowledge changes") @@ -87,7 +86,7 @@ class SyncService: parsed_entities: Dict[str, EntityMarkdown] = {} for file_path in [*changes.new, *changes.modified]: - entity_markdown = await self.entity_parser.parse_file(Path(file_path)) + entity_markdown = await self.entity_parser.parse_file(directory / file_path) parsed_entities[file_path] = entity_markdown # First pass: Create/update entities