Coverage for src \ truenex_memory \ core \ config.py: 100%
32 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-19 10:21 +0200
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-19 10:21 +0200
1"""Local project configuration for Truenex Memory."""
3from __future__ import annotations
5from dataclasses import dataclass
6import os
7from pathlib import Path
10DATA_DIR_NAME = ".truenex-memory"
11DB_FILENAME = "truenex_memory.db"
12DEFAULT_VECTOR_BACKEND = "sqlite"
13DEFAULT_QDRANT_URL = "http://localhost:6333"
14DEFAULT_QDRANT_COLLECTION = "truenex_memory"
17@dataclass(frozen=True)
18class ProjectConfig:
19 """Resolved local paths for one project memory store."""
21 project_root: Path
22 data_dir: Path
23 db_path: Path
24 exports_dir: Path
25 backups_dir: Path
26 vector_backend: str
27 qdrant_url: str
28 qdrant_collection: str
31MemoryConfig = ProjectConfig
32MemoryPaths = ProjectConfig
35def resolve_project_config(project_root: Path | str = ".") -> ProjectConfig:
36 """Return normalized local paths without creating files."""
38 root = Path(project_root).resolve()
39 data_dir = root / DATA_DIR_NAME
40 vector_backend = os.getenv("TRUENEX_MEMORY_VECTOR_BACKEND", DEFAULT_VECTOR_BACKEND).strip().lower()
41 if vector_backend not in {"sqlite", "qdrant"}:
42 vector_backend = DEFAULT_VECTOR_BACKEND
43 return ProjectConfig(
44 project_root=root,
45 data_dir=data_dir,
46 db_path=data_dir / DB_FILENAME,
47 exports_dir=data_dir / "exports",
48 backups_dir=data_dir / "backups",
49 vector_backend=vector_backend,
50 qdrant_url=os.getenv("TRUENEX_MEMORY_QDRANT_URL", DEFAULT_QDRANT_URL).strip() or DEFAULT_QDRANT_URL,
51 qdrant_collection=(
52 os.getenv("TRUENEX_MEMORY_QDRANT_COLLECTION", DEFAULT_QDRANT_COLLECTION).strip()
53 or DEFAULT_QDRANT_COLLECTION
54 ),
55 )
58def ensure_project_dirs(config: ProjectConfig) -> None:
59 """Create local data directories for a project."""
61 config.data_dir.mkdir(parents=True, exist_ok=True)
62 config.exports_dir.mkdir(parents=True, exist_ok=True)
63 config.backups_dir.mkdir(parents=True, exist_ok=True)