Skip to content

OrderedDjangoFilterConnectionField: "connection_resolver() missing 1 required positional argument: 'info’” #881

Open
@SillyScribe95

Description

@SillyScribe95

Testing filters using the OrderedDjangoFilterConnectionField solution in this issue; what should resolve_all_images be in this example? I’m getting connection_resolver() missing 1 required positional argument: 'info’” in the GraphQL Explorer in its current form.
https://stackoverflow.com/questions/57478464/django-graphene-relay-order-by-orderingfilter


class OrderedDjangoFilterConnectionField(DjangoFilterConnectionField):
    """
    Adapted from https://github.com/graphql-python/graphene/issues/251
    Substituting:
    `claims = DjangoFilterConnectionField(ClaimsGraphQLType)`
    with:
    ```
    claims = OrderedDjangoFilterConnectionField(ClaimsGraphQLType,
        orderBy=graphene.List(of_type=graphene.String))
    ```
    """
    @classmethod
    def connection_resolver(cls, resolver, connection, default_manager, max_limit,
                            enforce_first_or_last, filterset_class, filtering_args,
                            root, info,
                            **args):
        print("info", info)
        print("root", root)
        print("args", args)

        filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
        qs = filterset_class(
            data=filter_kwargs,
            queryset=default_manager.get_queryset()
            # request=info.context
        ).qs
        order = args.get('orderBy', None)
        if order:
            qs = qs.order_by(*order)
        # if order:
        #     if type(order) is str:
        #         snake_order = to_snake_case(order)
        #     else:
        #         snake_order = [to_snake_case(o) for o in order]
        #     qs = qs.order_by(*snake_order)
        return super(DjangoFilterConnectionField, cls).connection_resolver(
            resolver,
            connection,
            qs,
            max_limit,
            enforce_first_or_last,
            root,
            info,
            **args
        )


class ExtendedConnection(graphene.Connection):
    class Meta:
        abstract = True

    total_count = graphene.Int()

    def resolve_total_count(root, info, **kwargs):
        return root.length


class ImageType(DjangoObjectType):

    class Meta:
        model = Image
        exclude_fields = ('id',)
        filter_fields = []
        interfaces = (graphene.relay.Node,)

        connection_class = ExtendedConnection


class Query(graphene.ObjectType):
    all_Videos = OrderedDjangoFilterConnectionField(VideoType,
                                                    orderBy=graphene.List(of_type=graphene.String))

    def resolve_all_Images(self, info, **args):
        qs = Images.objects.all()
        order = args.get('orderBy', None)
        if order:
            qs = qs.order_by(*order)
        return qs
        return Images.objects.none()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions