Skip to content

Commit 425e8e5

Browse files
committed
fix: refactor config to always load from disk
Signed-off-by: phernandez <paul@basicmachines.co>
1 parent 159bca7 commit 425e8e5

50 files changed

Lines changed: 511 additions & 1447 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,4 @@ beta version:
179179

180180
# List all available recipes
181181
default:
182-
@just --list
182+
@just --list

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ build-backend = "hatchling.build"
5252

5353
[tool.pytest.ini_options]
5454
pythonpath = ["src", "tests"]
55-
addopts = "--cov=basic_memory --cov-report term-missing -ra -q"
55+
addopts = "--cov=basic_memory --cov-report term-missing"
5656
testpaths = ["tests"]
5757
asyncio_mode = "strict"
5858
asyncio_default_fixture_loop_scope = "function"

src/basic_memory/alembic/env.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@
88

99
from alembic import context
1010

11+
from basic_memory.config import ConfigManager
12+
1113
# set config.env to "test" for pytest to prevent logging to file in utils.setup_logging()
1214
os.environ["BASIC_MEMORY_ENV"] = "test"
1315

1416
# Import after setting environment variable # noqa: E402
15-
from basic_memory.config import app_config # noqa: E402
1617
from basic_memory.models import Base # noqa: E402
1718

1819
# this is the Alembic Config object, which provides
1920
# access to the values within the .ini file in use.
2021
config = context.config
2122

23+
app_config = ConfigManager().config
2224
# Set the SQLAlchemy URL from our app config
2325
sqlalchemy_url = f"sqlite:///{app_config.database_path}"
2426
config.set_main_option("sqlalchemy.url", sqlalchemy_url)

src/basic_memory/api/app.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
search,
2121
prompt_router,
2222
)
23-
from basic_memory.config import app_config
23+
from basic_memory.config import ConfigManager
2424
from basic_memory.services.initialization import initialize_app, initialize_file_sync
2525

2626

2727
@asynccontextmanager
2828
async def lifespan(app: FastAPI): # pragma: no cover
2929
"""Lifecycle manager for the FastAPI app."""
30+
31+
app_config = ConfigManager().config
3032
# Initialize app and database
3133
logger.info("Starting Basic Memory API")
3234
await initialize_app(app_config)

src/basic_memory/api/routers/management_router.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from loguru import logger
77
from pydantic import BaseModel
88

9-
from basic_memory.config import app_config
9+
from basic_memory.config import ConfigManager
1010
from basic_memory.deps import SyncServiceDep, ProjectRepositoryDep
1111

1212
router = APIRouter(prefix="/management", tags=["management"])
@@ -40,7 +40,9 @@ async def start_watch_service(
4040
if request.app.state.watch_task is not None and not request.app.state.watch_task.done():
4141
# Watch service is already running
4242
return WatchStatusResponse(running=True)
43-
43+
44+
app_config = ConfigManager().config
45+
4446
# Create and start a new watch service
4547
logger.info("Starting watch service via management API")
4648

src/basic_memory/cli/app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
import typer
44

5-
from basic_memory.config import get_project_config
5+
from basic_memory.config import get_project_config, ConfigManager
66
from basic_memory.mcp.project_session import session
77

88

99
def version_callback(value: bool) -> None:
1010
"""Show version and exit."""
1111
if value: # pragma: no cover
1212
import basic_memory
13-
from basic_memory.config import config
1413

14+
config = get_project_config()
1515
typer.echo(f"Basic Memory version: {basic_memory.__version__}")
1616
typer.echo(f"Current project: {config.project}")
1717
typer.echo(f"Project path: {config.home}")
@@ -44,9 +44,9 @@ def app_callback(
4444

4545
# Run initialization for every command unless --version was specified
4646
if not version and ctx.invoked_subcommand is not None:
47-
from basic_memory.config import app_config
4847
from basic_memory.services.initialization import ensure_initialization
4948

49+
app_config = ConfigManager().config
5050
ensure_initialization(app_config)
5151

5252
# Initialize MCP session with the specified project or default

src/basic_memory/cli/commands/db.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from basic_memory import db
1010
from basic_memory.cli.app import app
11-
from basic_memory.config import app_config, config_manager
11+
from basic_memory.config import ConfigManager, BasicMemoryConfig, save_basic_memory_config
1212

1313

1414
@app.command()
@@ -18,6 +18,8 @@ def reset(
1818
"""Reset database (drop all tables and recreate)."""
1919
if typer.confirm("This will delete all data in your db. Are you sure?"):
2020
logger.info("Resetting database...")
21+
config_manager = ConfigManager()
22+
app_config = config_manager.config
2123
# Get database path
2224
db_path = app_config.app_database_path
2325

@@ -27,9 +29,8 @@ def reset(
2729
logger.info(f"Database file deleted: {db_path}")
2830

2931
# Reset project configuration
30-
config_manager.config.projects = {"main": str(Path.home() / "basic-memory")}
31-
config_manager.config.default_project = "main"
32-
config_manager.save_config(config_manager.config)
32+
config = BasicMemoryConfig()
33+
save_basic_memory_config(config_manager.config_file, config)
3334
logger.info("Project configuration reset to default")
3435

3536
# Create a new empty database

src/basic_memory/cli/commands/import_chatgpt.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import typer
99
from basic_memory.cli.app import import_app
10-
from basic_memory.config import config
10+
from basic_memory.config import get_project_config
1111
from basic_memory.importers import ChatGPTImporter
1212
from basic_memory.markdown import EntityParser, MarkdownProcessor
1313
from loguru import logger
@@ -19,6 +19,7 @@
1919

2020
async def get_markdown_processor() -> MarkdownProcessor:
2121
"""Get MarkdownProcessor instance."""
22+
config = get_project_config()
2223
entity_parser = EntityParser(config.home)
2324
return MarkdownProcessor(entity_parser)
2425

@@ -49,7 +50,7 @@ def import_chatgpt(
4950

5051
# Get markdown processor
5152
markdown_processor = asyncio.run(get_markdown_processor())
52-
53+
config = get_project_config()
5354
# Process the file
5455
base_path = config.home / folder
5556
console.print(f"\nImporting chats from {conversations_json}...writing to {base_path}")

src/basic_memory/cli/commands/import_claude_conversations.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import typer
99
from basic_memory.cli.app import claude_app
10-
from basic_memory.config import config
10+
from basic_memory.config import get_project_config
1111
from basic_memory.importers.claude_conversations_importer import ClaudeConversationsImporter
1212
from basic_memory.markdown import EntityParser, MarkdownProcessor
1313
from loguru import logger
@@ -19,6 +19,7 @@
1919

2020
async def get_markdown_processor() -> MarkdownProcessor:
2121
"""Get MarkdownProcessor instance."""
22+
config = get_project_config()
2223
entity_parser = EntityParser(config.home)
2324
return MarkdownProcessor(entity_parser)
2425

@@ -42,6 +43,7 @@ def import_claude(
4243
After importing, run 'basic-memory sync' to index the new files.
4344
"""
4445

46+
config = get_project_config()
4547
try:
4648
if not conversations_json.exists():
4749
typer.echo(f"Error: File not found: {conversations_json}", err=True)

src/basic_memory/cli/commands/import_claude_projects.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import typer
99
from basic_memory.cli.app import claude_app
10-
from basic_memory.config import config
10+
from basic_memory.config import get_project_config
1111
from basic_memory.importers.claude_projects_importer import ClaudeProjectsImporter
1212
from basic_memory.markdown import EntityParser, MarkdownProcessor
1313
from loguru import logger
@@ -19,6 +19,7 @@
1919

2020
async def get_markdown_processor() -> MarkdownProcessor:
2121
"""Get MarkdownProcessor instance."""
22+
config = get_project_config()
2223
entity_parser = EntityParser(config.home)
2324
return MarkdownProcessor(entity_parser)
2425

@@ -41,6 +42,7 @@ def import_projects(
4142
4243
After importing, run 'basic-memory sync' to index the new files.
4344
"""
45+
config = get_project_config()
4446
try:
4547
if not projects_json.exists():
4648
typer.echo(f"Error: File not found: {projects_json}", err=True)

0 commit comments

Comments
 (0)