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
« prev ^ index » next coverage.py v7.11.3, created at 2026-03-24 05:23 +0000
1"""Database engine and session management for NexusLIMS.
3This module provides a centralized SQLModel engine and session factory
4for database operations, replacing the manual sqlite3 connection management.
5"""
7from typing import TYPE_CHECKING
9if TYPE_CHECKING:
10 from sqlalchemy.engine.base import Engine
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
17def get_engine() -> "Engine":
18 """
19 Get the database engine, creating it lazily on first access.
21 Returns
22 -------
23 sqlalchemy.engine.base.Engine
24 The SQLAlchemy/SQLModel engine for the NexusLIMS database.
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
36 from nexusLIMS.config import settings # noqa: PLC0415
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