"""DbContext: per-scenario database state for the DB module."""from__future__importannotationsfromdataclassesimportdataclass,fieldfromtypingimportAny
[docs]@dataclassclassDbContext:"""Holds all database state for a scenario. Lives at ``context.steplib.db`` and is reset between scenarios. Attributes: engine: The SQLAlchemy engine instance. connection: The active SQLAlchemy connection. connection_string: The SQLAlchemy connection string. transaction: The active transaction (if any). variables: User-defined variables stored by steps. backend: The backend name (e.g. ``"sqlalchemy"``). """engine:Any=Noneconnection:Any=Noneconnection_string:str=""transaction:Any=Nonevariables:dict[str,Any]=field(default_factory=dict)backend:str="sqlalchemy"
[docs]defreset(self)->None:"""Reset per-scenario state, keeping the engine and configuration."""self.variables={}
[docs]defcleanup(self)->None:"""Close the database connection if it exists."""ifself.transactionisnotNoneandhasattr(self.transaction,"rollback"):self.transaction.rollback()self.transaction=Noneifself.connectionisnotNoneandhasattr(self.connection,"close"):self.connection.close()self.connection=Noneifself.engineisnotNoneandhasattr(self.engine,"dispose"):self.engine.dispose()self.engine=None