TypeError: __init__() got an unexpected keyword argument 'type'
sanchit-gupta-cn opened this issue · 6 comments
Hi,
I am getting a TypeError on importing graphql_compiler.compile_graphql_to_cypher
.
Stacktrace
Traceback (most recent call last):
File "graphql_compiler_redis_test.py", line 6, in <module>
from graphql_compiler import compile_graphql_to_cypher
File "/env/lib/python3.6/site-packages/graphql_compiler/__init__.py", line 3, in <module>
from .compiler import ( # noqa
File "/env/lib/python3.6/site-packages/graphql_compiler/compiler/__init__.py", line 2, in <module>
from .common import ( # noqa
File "/env/lib/python3.6/site-packages/graphql_compiler/compiler/common.py", line 4, in <module>
from . import (
File "/env/lib/python3.6/site-packages/graphql_compiler/compiler/emit_cypher.py", line 3, in <module>
from .blocks import Fold, QueryRoot, Recurse, Traverse
File "/env/lib/python3.6/site-packages/graphql_compiler/compiler/blocks.py", line 7, in <module>
from .helpers import (
File "/env/lib/python3.6/site-packages/graphql_compiler/compiler/helpers.py", line 14, in <module>
from ..schema import INBOUND_EDGE_FIELD_PREFIX, OUTBOUND_EDGE_FIELD_PREFIX, is_vertex_field_name
File "/env/lib/python3.6/site-packages/graphql_compiler/schema.py", line 26, in <module>
description='Name of the filter operation to perform.',
TypeError: __init__() got an unexpected keyword argument 'type'
Steps to Reproduce
from graphql_compiler import compile_graphql_to_cypher
System details
Linux: Ubuntu 20.04.1 LTS
Python version: 3.6.12
The output of pip list
:
Package Version
---------------- -------
arrow 0.17.0
funcy 1.15
graphql-compiler 1.11.0
graphql-core 2.3.2
pip 20.3.3
promise 2.3
python-dateutil 2.8.1
pytz 2020.5
Rx 1.6.1
setuptools 51.0.0
six 1.15.0
SQLAlchemy 1.3.22
wheel 0.35.1
PS: The python virtual environment had just graphql-compiler
installed.
Things I already tried
I tried with python v3.8.5. Got the same error.
I went through this issue #861 and made sure that the package versions are correct, especially graphql-core
as mentioned in setup.py
Digging a little more,
I found that error points to L26 of graphql_compiler/schema.py. Snippet of code around there is:
FilterDirective = GraphQLDirective(
name='filter',
args=OrderedDict([(
'op_name', GraphQLArgument(
type=GraphQLNonNull(GraphQLString),
description='Name of the filter operation to perform.',
)),
('value', GraphQLArgument(
type=GraphQLNonNull(GraphQLList(GraphQLNonNull(GraphQLString))),
description='List of string operands for the operator.',
))]
),
here you are attempting to create a GraphQLArgument
with type
=GraphQLNonNull(GraphQLString),
but going through the codebase of graphql-core
v2.3.2, class GraphQLArgument
constructor is this:
class GraphQLArgument(object):
__slots__ = "type", "default_value", "description", "out_name"
def __init__(
self,
type_, # type: Union[GraphQLInputObjectType, GraphQLNonNull, GraphQLList, GraphQLScalarType]
default_value=None, # type: Optional[Any]
description=None, # type: Optional[Any]
out_name=None, # type: Optional[str]
):
# type: (...) -> None
self.type = type_
self.default_value = default_value
self.description = description
self.out_name = out_name
the constructor seems to accept the keyword argument type_
instead of type
.
So I went through your repo to find over here that this change from type
to type_
has already been done.
pip install graphql-compiler
installs v1.11.0. Should I explicitly use one of v2.0.0dev versions?
Sorry if this was a lot of info but I hope that it helps in resolving this issue.
Looking forward to your reply.
I solved the issue using v2.0.0.dev29
pip install graphql-compiler==2.0.0.dev29
But still wondering when will v2.0.0 be released because we intend to use graphql-compiler
in production.
Hi, thanks for checking out this project and for tracking down the issue. For now, yes, I'd advise using one of the v2.0.0.dev releases — some of the API-breaking changes we need to do to release v2.0 (e.g. deprecate Gremlin and explicitly define the package's public API) have had to be pushed back. I unfortunately don't have a timeline I can share at the moment.
I also see that you are using the Cypher backend, potentially with Redis Graph? The Cypher backend is still in an alpha stage and not currently actively developed — last time we worked on it, we found that the then-most-recent Neo4j and Redis Graph versions didn't yet support all aspects of the latest published version of the Cypher language spec, so we paused development to allow them to catch up to the spec.
We are unfortunately a very small team and we don't have the bandwidth to pick Cypher development back up at this time. Our efforts have been focused largely on improving the SQL side of the compiler since that's a very common and large use case, so I'd encourage you to try the compiler's support for PostgreSQL. If instead you are set on using the Cypher backend, we'd be happy to take pull requests :)
Sorry I don't have a better reply!
Also, if you don't mind me asking out of curiosity, how did you hear about GraphQL compiler? Hoping to figure out the popular ways through which people discover our project.
Hi,
Thank you for the detailed reply. Will be looking forward to v2 being released.
And yes, your guess was correct. I was trying to use graphql-compiler
along with RedisGraph. The main motivation was to avoid writing boilerplate code converting GraphQL to Cypher, something like this library, but for RedisGraph. I came across graphql-compiler
when going through this issue.
Btw, redisgraph-py now supports query parameters (Ref), so maybe this doc can be updated. But yeah, RedisGraph still doesn't have complete Cypher coverage.
Also, we really appreciate the kensho guys contributing to this project and keeping it open source (and for also writing awesome blogs!). I'll make sure to raise PRs if I find myself modifying the code for our use-case, or if I find any bugs :).
Thank you for the kind words, they made our day!
Please feel free to open PRs for anything that needs updating, and we'd be happy to review and accept them. The Cypher backend actually started off as @LWprogramming's intern project, and while we haven't worked on it in a while, we'd love to have it properly updated and as fully-functional as possible.
The doc you mentioned needs updating lives in this repo here and it'd be a great place to start contributing.
Also, if I understood correctly, you mentioned that this issue is resolved in the v2.0 prereleases? If so, I'd like to mark it as closed since fixing the reported problem doesn't require any further code changes, and simply requires v2.0 to be released.