resolver outside of the class isn't working in SQLAlchemyConnectionField
I've been trying to get this to work for some time and haven't been able to figure it out. I am trying to use a resolver outside of a class using an SQLAlchemyConnectionField. The resolver is called when it is in the class however not when it is outside of the class. I have modified the flask example code to demonstrate this:
class Employee(SQLAlchemyObjectType):
class Meta:
model = EmployeeModel
interfaces = (relay.Node, )
favourite_roles = SQLAlchemyConnectionField(Role)
def resolve_favourite_roles(self, args, context, info):
# everyone wants to be a manager
return Role.get_query(Role).filter_by(name='manager')
The above code works as expected. for the query:
{allEmployees {
edges {
node {
name
favouriteRoles {
edges{
node {
name
}
}
}
}
}
}}
It returns:
{
"data": {
"allEmployees": {
"edges": [
{
"node": {
"name": "Peter",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
}
]
}
}
},
{
"node": {
"name": "Roy",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
}
]
}
}
},
{
"node": {
"name": "Tracy",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
}
]
}
}
}
]
}
}
}
However when I have this code:
def resolve_favourite_roles(root, args, context, info):
# everyone wants to be a manager
return Role.get_query(Role).filter_by(name='manager')
class Employee(SQLAlchemyObjectType):
class Meta:
model = EmployeeModel
interfaces = (relay.Node, )
favourite_roles = SQLAlchemyConnectionField(Role, resolver=resolve_favourite_roles)
This is the result.
{
"data": {
"allEmployees": {
"edges": [
{
"node": {
"name": "Peter",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
},
{
"node": {
"name": "engineer"
}
}
]
}
}
},
{
"node": {
"name": "Roy",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
},
{
"node": {
"name": "engineer"
}
}
]
}
}
},
{
"node": {
"name": "Tracy",
"favouriteRoles": {
"edges": [
{
"node": {
"name": "manager"
}
},
{
"node": {
"name": "engineer"
}
}
]
}
}
}
]
}
}
}
The resolver function is not being called when it is outside of the class.
Any help is appreciated.
workaround:
def resolve_favourite_roles(root, args, context, info):
return Role.get_query(Role).filter_by(name='manager')
class Employee(SQLAlchemyObjectType):
class Meta:
model = EmployeeModel
interfaces = (relay.Node, )
favourite_roles = SQLAlchemyConnectionField(Role)
# This line makes it work
resolve_favourite_roles = resolve_favourite_roles
I just ran into this as well - certainly had me confused for a bit.
I'm experiencing this issue as well.