Source code for nexusLIMS.db.engine
"""Database engine and session management for NexusLIMS.
This module provides a centralized SQLModel engine and session factory
for database operations, replacing the manual sqlite3 connection management.
"""
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from sqlalchemy.engine.base import Engine
# Lazy singleton — created on first call to get_engine().
# Reset to None by SingletonResetter.reset_db_engine() between tests.
_engine: "Engine | None" = None
[docs]
def get_engine() -> "Engine":
"""
Get the database engine, creating it lazily on first access.
Returns
-------
sqlalchemy.engine.base.Engine
The SQLAlchemy/SQLModel engine for the NexusLIMS database.
Examples
--------
>>> from nexusLIMS.db.engine import get_engine
>>> engine = get_engine()
>>> # Use engine for advanced operations
"""
global _engine # noqa: PLW0603
if _engine is None:
from sqlmodel import create_engine # noqa: PLC0415
from nexusLIMS.config import settings # noqa: PLC0415
_engine = create_engine(
f"sqlite:///{settings.NX_DB_PATH}",
connect_args={"check_same_thread": False},
echo=False,
)
return _engine