Coverage for nexusLIMS/db/engine.py: 100%

8 statements  

« prev     ^ index     » next       coverage.py v7.11.3, created at 2026-03-24 05:23 +0000

1"""Database engine and session management for NexusLIMS. 

2 

3This module provides a centralized SQLModel engine and session factory 

4for database operations, replacing the manual sqlite3 connection management. 

5""" 

6 

7from typing import TYPE_CHECKING 

8 

9if TYPE_CHECKING: 

10 from sqlalchemy.engine.base import Engine 

11 

12# Lazy singleton — created on first call to get_engine(). 

13# Reset to None by SingletonResetter.reset_db_engine() between tests. 

14_engine: "Engine | None" = None 

15 

16 

17def get_engine() -> "Engine": 

18 """ 

19 Get the database engine, creating it lazily on first access. 

20 

21 Returns 

22 ------- 

23 sqlalchemy.engine.base.Engine 

24 The SQLAlchemy/SQLModel engine for the NexusLIMS database. 

25 

26 Examples 

27 -------- 

28 >>> from nexusLIMS.db.engine import get_engine 

29 >>> engine = get_engine() 

30 >>> # Use engine for advanced operations 

31 """ 

32 global _engine # noqa: PLW0603 

33 if _engine is None: 

34 from sqlmodel import create_engine # noqa: PLC0415 

35 

36 from nexusLIMS.config import settings # noqa: PLC0415 

37 

38 _engine = create_engine( 

39 f"sqlite:///{settings.NX_DB_PATH}", 

40 connect_args={"check_same_thread": False}, 

41 echo=False, 

42 ) 

43 return _engine