Skip to content

Reflection does not work  #55

Open
@fgregg

Description

@fgregg

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions