1from graphene.utils.get_unbound_function import get_unbound_function 2 3 4def get_custom_resolver(obj_type, orm_field_name): 5 """ 6 Since `graphene` will call `resolve_<field_name>` on a field only if it 7 does not have a `resolver`, we need to re-implement that logic here so 8 users are able to override the default resolvers that we provide. 9 """ 10 resolver = getattr(obj_type, 'resolve_{}'.format(orm_field_name), None) 11 if resolver: 12 return get_unbound_function(resolver) 13 14 return None 15 16 17def get_attr_resolver(obj_type, model_attr): 18 """ 19 In order to support field renaming via `ORMField.model_attr`, 20 we need to define resolver functions for each field. 21 22 :param SQLAlchemyObjectType obj_type: 23 :param str model_attr: the name of the SQLAlchemy attribute 24 :rtype: Callable 25 """ 26 return lambda root, _info: getattr(root, model_attr, None) 27