Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Forced to use relay pagination on list of embedded documents? #162

Open
BeauGieskens opened this issue Nov 6, 2020 · 0 comments
Open

Forced to use relay pagination on list of embedded documents? #162

BeauGieskens opened this issue Nov 6, 2020 · 0 comments

Comments

@BeauGieskens
Copy link

Suppose I have this document structure:

class PersonModel(EmbeddedDocument):
    name = StringField()

class HouseModel(Document):
    people = ListField(EmbeddedDocumentField(PersonModel))

Then I define my MongoengineObjectTypes:

class Person(MongoengineObjectType):
    class Meta:
        model = PersonModel
        # no interface, since I want to access the people directly

class House(MongoengineObjectType):
    class Meta:
        model = HouseModel
        interfaces = (Node,)

Then I build my schema:

class Query(graphene.ObjectType):
    node = Node.Field()
    houses = MongoengineConnectionField(House)

schema = graphene.Schema(query=Query, types=[House, Person])

This spits out an unfriendly error:

Traceback (most recent call last):
  File "test.py", line 32, in <module>
    schema = graphene.Schema(query=Query, types=[House, Person])
  File "%python39%\lib\site-packages\graphene\types\schema.py", line 78, in __init__
    self.build_typemap()
  File "%python39%\lib\site-packages\graphene\types\schema.py", line 167, in build_typemap
    self._type_map = TypeMap(
  File "%python39%\lib\site-packages\graphene\types\typemap.py", line 80, in __init__
    super(TypeMap, self).__init__(types)
  File "%python39%\lib\site-packages\graphql\type\typemap.py", line 31, in __init__
    self.update(reduce(self.reducer, types, OrderedDict()))  # type: ignore
  File "%python39%\lib\site-packages\graphene\types\typemap.py", line 88, in reducer
    return self.graphene_reducer(map, type)
  File "%python39%\lib\site-packages\graphene\types\typemap.py", line 117, in graphene_reducer
    return GraphQLTypeMap.reducer(map, internal_type)
  File "%python39%\lib\site-packages\graphql\type\typemap.py", line 109, in reducer
    field_map = type_.fields
  File "%python39%\lib\site-packages\graphql\pyutils\cached_property.py", line 22, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "%python39%\lib\site-packages\graphql\type\definition.py", line 198, in fields
    return define_field_map(self, self._fields)
  File "%python39%\lib\site-packages\graphql\type\definition.py", line 212, in define_field_map
    field_map = field_map()
  File "%python39%\lib\site-packages\graphene\types\typemap.py", line 286, in construct_fields_for_type
    for arg_name, arg in field.args.items():
  File "%python39%\lib\site-packages\graphene_mongo\fields.py", line 68, in args
    return to_arguments(
  File "%python%\lib\site-packages\graphene\types\argument.py", line 80, in to_arguments
    extra_args = sorted(extra_args.items(), key=lambda f: f[1])
TypeError: '<' not supported between instances of 'Person' and 'ID'

But if I add interfaces = (Node,) to the meta of Person the error goes away. However, I am also now forced to paginate through data which I know will also be only a small collection.

SpinyCucumber added a commit to SpinyCucumber/graphene-mongo that referenced this issue Jan 1, 2022
SpinyCucumber added a commit to SpinyCucumber/graphene-mongo that referenced this issue Jan 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant