graphql-ws icon indicating copy to clipboard operation
graphql-ws copied to clipboard

graphql-core v3?

Open GinTR1k opened this issue 5 years ago • 3 comments

Hello!

Is there any plan to update graphql-core dependency to the latest version?

GinTR1k avatar Jul 10 '20 08:07 GinTR1k

would love to know about this as well

hyusetiawan avatar Aug 02 '20 02:08 hyusetiawan

Hey there, to add some context here - graphql-ws is now incompatible with graphql-core included in graphene and graphql-server. I've discussed this a bit over here: https://app.slack.com/client/TBFTZEULB/CBG1GAB42/thread/CBG1GAB42-1605717933.051400

Attempting to install the following packages:

graphene = "==3.0.0b2"
graphql-server = {extras = ["aiohttp"], version = "==3.0.0b2"}
graphql-ws = "==0.3.1"

Results in:

pipenv install graphql-ws==0.3.1
Installing graphql-ws==0.3.1…
Adding graphql-ws to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (b7b025) out of date, updating to (ee6f08)…
Locking [dev-packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success! 
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✘ Locking Failed! 
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 785, in _main
[ResolutionFailure]:       resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 746, in resolve_packages
[ResolutionFailure]:       results, resolver = resolve(
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 728, in resolve
[ResolutionFailure]:       return resolve_deps(
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 1378, in resolve_deps
[ResolutionFailure]:       results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 1093, in actually_resolve_deps
[ResolutionFailure]:       resolver.resolve()
[ResolutionFailure]:   File "/home/ossareh/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 818, in resolve
[ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: Could not find a version that matches graphql-core<3,<4,>=2.0,>=3.1.0,>=3.1.0b1 (from graphene==3.0.0b2->-r /tmp/pipenvam0pkvu9requirements/pipenv-d_a7l2a7-constraints.txt (line 2))
Tried: 0.4.9, 0.4.11, 0.4.12, 0.4.12.1, 0.4.13, 0.4.14, 0.4.15, 0.4.16, 0.4.17, 0.4.18, 0.5, 0.5.1, 0.5.2, 0.5.3, 1.0, 1.0.1, 1.1, 2.0, 2.0, 2.1, 2.1, 2.2, 2.2, 2.2.1, 2.2.1, 2.3, 2.3, 2.3.1, 2.3.1, 2.3.2, 2.3.2, 3.0.0, 3.0.0, 3.0.1, 3.0.1, 3.0.2, 3.0.2, 3.0.3, 3.0.3, 3.0.4, 3.0.4, 3.0.5, 3.0.5, 3.1.0, 3.1.0, 3.1.1, 3.1.1, 3.1.2, 3.1.2
Skipped pre-versions: 0.1a0, 0.1a1, 0.1a2, 0.1a3, 0.1a4, 0.4.7b0, 0.4.7b1, 0.4.7b2, 0.5b1, 0.5b2, 0.5b3, 1.0.dev20160814231515, 1.0.dev20160822075425, 1.0.dev20160823054952, 1.0.dev20160909030348, 1.0.dev20160909040033, 1.0.dev20160920065529, 1.2.dev20170724044604, 2.0.dev20170801041408, 2.0.dev20170801041408, 2.0.dev20170801051721, 2.0.dev20170801051721, 2.0.dev20171009101843, 2.0.dev20171009101843, 2.1rc0, 2.1rc0, 2.1rc1, 2.1rc1, 2.1rc2, 2.1rc2, 2.1rc3, 2.1rc3, 3.0.0a0, 3.0.0a0, 3.0.0a1, 3.0.0a1, 3.0.0a2, 3.0.0a2, 3.0.0b0, 3.0.0b0, 3.0.0b1, 3.0.0b1, 3.1.0b0, 3.1.0b0, 3.1.0b1, 3.1.0b1, 3.1.0b2, 3.1.0b2
There are incompatible versions in the resolved dependencies:
  graphql-core<3,>=2.0 (from graphql-ws==0.3.1->-r /tmp/pipenvam0pkvu9requirements/pipenv-d_a7l2a7-constraints.txt (line 4))
  graphql-core<4,>=3.1.0 (from graphql-server[aiohttp]==3.0.0b2->-r /tmp/pipenvam0pkvu9requirements/pipenv-d_a7l2a7-constraints.txt (line 6))
  graphql-core<4,>=3.1.0b1 (from graphene==3.0.0b2->-r /tmp/pipenvam0pkvu9requirements/pipenv-d_a7l2a7-constraints.txt (line 2))

fwiw, using pip instead of pipenv results in graphql-ws installing but it is then incompatible at the code-API layer:

Traceback (most recent call last):
  File "/home/ossareh/dev/src/github.com/erisyon/vega/guvnor/server.py", line 4, in <module>
    import graphene as gql
  File "/home/ossareh/.local/share/virtualenvs/vega-IIh8dIOy/lib/python3.9/site-packages/graphene/__init__.py", line 3, in <module>
    from .types import (
  File "/home/ossareh/.local/share/virtualenvs/vega-IIh8dIOy/lib/python3.9/site-packages/graphene/types/__init__.py", line 2, in <module>
    from graphql import GraphQLResolveInfo as ResolveInfo
ImportError: cannot import name 'GraphQLResolveInfo' from 'graphql' (/home/ossareh/.local/share/virtualenvs/vega-IIh8dIOy/lib/python3.9/site-packages/graphql/__init__.py)

This is generated by the following code:

import asyncio
import time

import graphene as gql
import graphql_server.aiohttp as srv
from aiohttp import web
from graphql_ws.aiohttp import AiohttpSubscriptionServer


class Query(gql.ObjectType):
    hello = gql.String(name=gql.String(default_value="bob"))

    def resolve_hello(root, info, name):
        return f"Hello to you and you family {name}!"


class Result(gql.ObjectType):
    time = gql.Int()
    msg = gql.String()

    def __init__(self, msg):
        self.time = time.time()
        self.msg = msg


class Subscription(gql.ObjectType):
    result_stream = gql.Field(Result)

    async def subscribe_result_stream(root, info):
        print("starting")
        while True:
            print(root, info)
            yield Result("Imagine I was helpful!")
            await asyncio.sleep(5)


schema = gql.Schema(query=Query, subscription=Subscription)

app = web.Application()
srv.GraphQLView.attach(
    app,
    schema=schema.graphql_schema,
    graphiql=True,
    subscriptions="ws://localhost:8080/subscriptions",
    enable_async=True,
)

subscription_server = AiohttpSubscriptionServer(schema)


async def subscriptions(request):
    ws = web.WebSocketResponse(protocols=("graphql-ws",))
    await ws.prepare(request)

    await subscription_server.handle(ws)
    return ws


app.router.add_get("/subscriptions", subscriptions)

if __name__ == "__main__":
    web.run_app(app)

ossareh avatar Nov 18 '20 18:11 ossareh