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

1"""Local project configuration for Truenex Memory.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6import os 

7from pathlib import Path 

8 

9 

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" 

15 

16 

17@dataclass(frozen=True) 

18class ProjectConfig: 

19 """Resolved local paths for one project memory store.""" 

20 

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 

29 

30 

31MemoryConfig = ProjectConfig 

32MemoryPaths = ProjectConfig 

33 

34 

35def resolve_project_config(project_root: Path | str = ".") -> ProjectConfig: 

36 """Return normalized local paths without creating files.""" 

37 

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 ) 

56 

57 

58def ensure_project_dirs(config: ProjectConfig) -> None: 

59 """Create local data directories for a project.""" 

60 

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)