graphene-sqlalchemy icon indicating copy to clipboard operation
graphene-sqlalchemy copied to clipboard

Better approach to `is_mapped_class`

Open dfee opened this issue 7 years ago • 0 comments

sqlalchemy.orm.class_mapper relies on sqlalchemy.orm.configure_mappers to have been called - either explicitly or implicitly by attempting to interact with the mapper. This means that graphene_sqlalchemy.utils.class_mapper forces a call to configure_mappers – which in turn throws an error unless every model referenced in a deferred callable (i.e. user = relationship('User')) has already been discovered.

However, there is another way to determine if a class is a mapper without forcing configure_mappers. The recipe is this:

from sqlalchemy.orm import Mapper
from sqlalchemy.exc import NoInspectionAvailable

def is_mapped_class(cls):
    '''modified from graphene_sqlalchemy/types.py '''
    try:
        return isinstance(inspect(cls), Mapper)
    except NoInspectionAvailable:
        return False

dfee avatar Apr 17 '18 23:04 dfee