- What is the current behavior?
In order for us to have consistent IDs and unique IDs for all our entities we made all entities were inheriting from this class:
class ObjectTypeWithID(ObjectType):
id = ID(required=True, description="globally unique identifier")
entity_id = String(required=True, description="identifier for the entity")
model_id = String(required=True, description="identifier for the entity model")
def __init__(self, id):
print('!!!ObjectTypeWithID.__init__')
self.id = generate_global_id(self.__class__.__name__, id)
self.entity_id = id
self.model_id = id
# usage
class User(ObjectTypeWithID)
def __init__:
super().__init__(user_id)
This worked fine in Graphene 2.x but once we tried to upgrade to Graphene 3.x it seems like super().__init__ does not trigger ObjectTypeWithID
I checked the mro and I noticed there's now InterObjectType between User and it's parent ObjectTypeWithID and I suspect it's getting in the way when call super()
user.__class__.__mro__ in Graphene 3.x
(
<User meta=<ObjectTypeOptions name='User'>>,
<class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>,
<ObjectTypeWithID meta=<ObjectTypeOptions name='ObjectTypeWithID'>>,
<class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>,
<ObjectType meta=None>,
<class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>,
<BaseType meta=None>,
<SubclassWithMeta meta=None>, <class 'object'>
)
user.__class__.__mro__ in Graphene 2.x
(
<Campaign meta=<ObjectTypeOptions name='Campaign'>>,
<ObjectTypeWithID meta=<ObjectTypeOptions name='ObjectTypeWithID'>>,
<ObjectType meta=None>,
<BaseType meta=None>,
<SubclassWithMeta meta=None>,
<class 'object'>
)
In order for us to have consistent IDs and unique IDs for all our entities we made all entities were inheriting from this class:
This worked fine in Graphene 2.x but once we tried to upgrade to Graphene 3.x it seems like
super().__init__does not triggerObjectTypeWithIDI checked the mro and I noticed there's now InterObjectType between User and it's parent ObjectTypeWithID and I suspect it's getting in the way when call
super()user.__class__.__mro__in Graphene 3.x( <User meta=<ObjectTypeOptions name='User'>>, <class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>, <ObjectTypeWithID meta=<ObjectTypeOptions name='ObjectTypeWithID'>>, <class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>, <ObjectType meta=None>, <class 'graphene.types.objecttype.ObjectTypeMeta.new.<locals>.InterObjectType'>, <BaseType meta=None>, <SubclassWithMeta meta=None>, <class 'object'> )user.__class__.__mro__in Graphene 2.x( <Campaign meta=<ObjectTypeOptions name='Campaign'>>, <ObjectTypeWithID meta=<ObjectTypeOptions name='ObjectTypeWithID'>>, <ObjectType meta=None>, <BaseType meta=None>, <SubclassWithMeta meta=None>, <class 'object'> )