diff --git a/installer/installer.py b/installer/installer.py index 9f2880fc..63a2cff4 100644 --- a/installer/installer.py +++ b/installer/installer.py @@ -8,6 +8,7 @@ if sys.platform == "darwin": import tkinter as tk from tkinter import messagebox + def ensure_uv_installed(): """Check if uv is installed, install if not.""" try: diff --git a/installer/setup.py b/installer/setup.py index 417fe695..107d46e5 100644 --- a/installer/setup.py +++ b/installer/setup.py @@ -4,31 +4,24 @@ import sys # Build options for all platforms build_exe_options = { "packages": ["json", "pathlib"], - "excludes": [ - "unittest", - "pydoc", - "test" - ], + "excludes": ["unittest", "pydoc", "test"], } # Platform-specific options if sys.platform == "win32": base = "Win32GUI" # Use GUI base for Windows - build_exe_options.update({ - "include_msvcr": True, - }) + build_exe_options.update( + { + "include_msvcr": True, + } + ) target_name = "Basic Memory Installer.exe" else: # darwin base = None # Don't use GUI base for macOS target_name = "Basic Memory Installer" executables = [ - Executable( - script="installer.py", - target_name=target_name, - base=base, - icon="Basic.icns" - ) + Executable(script="installer.py", target_name=target_name, base=base, icon="Basic.icns") ] setup( @@ -41,7 +34,7 @@ setup( "bundle_name": "Basic Memory Installer", "iconfile": "Basic.icns", "codesign_identity": "-", # Force ad-hoc signing - } + }, }, executables=executables, ) diff --git a/src/basic_memory/cli/commands/status.py b/src/basic_memory/cli/commands/status.py index 471b93b3..0d689ed1 100644 --- a/src/basic_memory/cli/commands/status.py +++ b/src/basic_memory/cli/commands/status.py @@ -26,7 +26,7 @@ async def get_file_change_scanner( ) -> FileChangeScanner: # pragma: no cover """Get sync service instance.""" _, session_maker = await db.get_or_create_db(db_path=config.database_path, db_type=db_type) - + entity_repository = EntityRepository(session_maker) file_change_scanner = FileChangeScanner(entity_repository) return file_change_scanner diff --git a/src/basic_memory/cli/commands/sync.py b/src/basic_memory/cli/commands/sync.py index bec0cea2..da6e47b1 100644 --- a/src/basic_memory/cli/commands/sync.py +++ b/src/basic_memory/cli/commands/sync.py @@ -14,7 +14,6 @@ from rich.tree import Tree from basic_memory import db from basic_memory.cli.app import app from basic_memory.config import config -from basic_memory.db import DatabaseType from basic_memory.markdown import EntityParser from basic_memory.markdown.markdown_processor import MarkdownProcessor from basic_memory.repository import ( @@ -41,7 +40,9 @@ class ValidationIssue: async def get_sync_service(): # pragma: no cover """Get sync service instance with all dependencies.""" - _, session_maker = await db.get_or_create_db(db_path=config.database_path, db_type=db.DatabaseType.FILESYSTEM) + _, session_maker = await db.get_or_create_db( + db_path=config.database_path, db_type=db.DatabaseType.FILESYSTEM + ) entity_parser = EntityParser(config.home) markdown_processor = MarkdownProcessor(entity_parser) @@ -52,7 +53,7 @@ async def get_sync_service(): # pragma: no cover observation_repository = ObservationRepository(session_maker) relation_repository = RelationRepository(session_maker) search_repository = SearchRepository(session_maker) - + # Initialize services search_service = SearchService(search_repository, entity_repository, file_service) link_resolver = LinkResolver(entity_repository, search_service) @@ -152,8 +153,7 @@ def display_detailed_sync_results(knowledge: SyncReport): async def run_sync(verbose: bool = False, watch: bool = False): """Run sync operation.""" - - + sync_service = await get_sync_service() # Start watching if requested diff --git a/src/basic_memory/db.py b/src/basic_memory/db.py index 154f028e..7407ec46 100644 --- a/src/basic_memory/db.py +++ b/src/basic_memory/db.py @@ -18,7 +18,6 @@ from sqlalchemy.ext.asyncio import ( async_scoped_session, ) -from basic_memory.models.search import CREATE_SEARCH_INDEX from basic_memory.repository.search_repository import SearchRepository # Module level state @@ -73,7 +72,6 @@ async def scoped_session( await factory.remove() - async def get_or_create_db( db_path: Path, db_type: DatabaseType = DatabaseType.FILESYSTEM, diff --git a/src/basic_memory/sync/utils.py b/src/basic_memory/sync/utils.py index bd5b5194..e2e0a0d6 100644 --- a/src/basic_memory/sync/utils.py +++ b/src/basic_memory/sync/utils.py @@ -4,8 +4,6 @@ from dataclasses import dataclass, field from typing import Set, Dict - - @dataclass class SyncReport: """Report of file changes found compared to database state. diff --git a/tests/conftest.py b/tests/conftest.py index a75f2146..dd43bbdd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,6 @@ from datetime import datetime, timezone import pytest import pytest_asyncio from loguru import logger -from sqlalchemy import text from sqlalchemy.ext.asyncio import AsyncSession, AsyncEngine, async_sessionmaker from basic_memory import db @@ -62,7 +61,7 @@ async def engine_factory( # Create all tables for the DB the engine is connected to async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) - + yield engine, session_maker diff --git a/tests/mcp/test_tool_notes.py b/tests/mcp/test_tool_notes.py index f0f55f70..f31e9288 100644 --- a/tests/mcp/test_tool_notes.py +++ b/tests/mcp/test_tool_notes.py @@ -257,4 +257,4 @@ async def test_read_note_memory_url(app): # Should be able to read it with a memory:// URL memory_url = f"memory://{permalink}" content = await notes.read_note(memory_url) - assert "Testing memory:// URL handling" in content \ No newline at end of file + assert "Testing memory:// URL handling" in content diff --git a/uv.lock b/uv.lock index a74555dd..578e9be6 100644 --- a/uv.lock +++ b/uv.lock @@ -70,7 +70,7 @@ wheels = [ [[package]] name = "basic-memory" -version = "0.2.20" +version = "0.2.21" source = { editable = "." } dependencies = [ { name = "aiosqlite" },