Open
Description
Code that uses SQLAlchemy's Reflection facilities won't work with a monkey patched database engine.
code like this:
messages = Table('messages', meta, autoload_with=engine)
raises the error sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type <class 'unittest.mock.MagicMock'>
The relevant SQLAlchemy code is here: https://github.com/sqlalchemy/sqlalchemy/blob/52e8545b2df312898d46f6a5b119675e8d0aa956/lib/sqlalchemy/sql/schema.py#L693-L718
it might be enough to
Register the mocked engine in the sqlalchemy.inspections._registrars
dictionary. You would need to specialize the MagickMock class when setting up the db_engine to make sure we get a handle on just the mocked engine. something like:
class EngineMock(mocker.MagickMock):
pass
engine = EngineMock(spec=sa.engine.Engine)
sqlalchemy.inspections._registrars[EngineMock] = sqlalchemy.engine.Inspector._engine_insp
=
Metadata
Metadata
Assignees
Labels
No labels