I’m trying to leverage Ariadne (https://github.com/mirumee/ariadne) graphql project within Sanic to give myself some graphql endpoints. I’m able to get this to work just fine for a standard get/post endpoint within sanic; however, I’m having trouble with the websocket / subscription endpoint. Supposedly all you need an asgi server and websockets (both of which Sanic has), but I can’t figure out how to hook it up.
My normal process for websockets is:
@app.websocket("/ws/tasks") @inject_user() @scoped( ["auth:user", "auth:apitoken_user"], False ) # user or user-level api token are ok async def ws_tasks(request, ws, user): # open connection to db # listen for updates from db and send them through ws
In other asgi applications, they’re able to do the following (from https://github.com/mirumee/ariadne/issues/320#issuecomment-722236333)
from ariadne.asgi import GraphQL from starlette.routing import Route, WebSocketRoute routers = [ Route("/graphql", GraphQL(schema=schema, debug=True)), WebSocketRoute("/graphql", GraphQL(schema=schema, debug=True)), ] app = Starlette(debug=True, routes=routers)
and essentially just plug it in. When I try to do something similar with Sanic (
app.add_websocket_route(GraphQL(schema=schema, debug=True), "/graphql") I get
AttributeError: 'GraphQL' object has no attribute '__name__'