From 044bfa5bd46d7b3114d4df5c109706ab2ea6a52b Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Wed, 7 Dec 2022 21:51:38 +0300 Subject: [PATCH] subs-on-ws --- main.py | 13 ++++++++++--- requirements.txt | 3 ++- resolvers/inbox/messages.py | 7 ++----- schema.graphql | 8 +++----- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/main.py b/main.py index fdb0b4ca..f171ed77 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ from services.zine.gittask import GitTask from settings import DEV_SERVER_STATUS_FILE_NAME, SENTRY_DSN from ariadne.asgi.handlers import GraphQLTransportWSHandler from services.inbox.presence import on_connect, on_disconnect -from services.inbox.sse import sse_messages +# from services.inbox.sse import sse_messages import_module("resolvers") @@ -68,7 +68,7 @@ routes = [ Route("/oauth/{provider}", endpoint=oauth_login), Route("/oauth-authorize", endpoint=oauth_authorize), Route("/confirm/{token}", endpoint=confirm_email_handler), - Route("/messages", endpoint=sse_messages) + # Route("/messages", endpoint=sse_messages) ] app = Starlette( @@ -94,4 +94,11 @@ dev_app = app = Starlette( middleware=middleware, routes=routes, ) -dev_app.mount("/", GraphQL(schema, debug=True)) +dev_app.mount("/", GraphQL( + schema, + debug=True, + websocket_handler=GraphQLTransportWSHandler( + on_connect=on_connect, + on_disconnect=on_disconnect + ) +)) diff --git a/requirements.txt b/requirements.txt index 2ef836aa..69f5c1e8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ PyYAML>=5.4 pyjwt>=2.6.0 starlette~=0.20.4 sqlalchemy>=1.4.41 -graphql-core +graphql-core>=3.0.3 gql uvicorn>=0.18.3 pydantic>=1.10.2 @@ -28,3 +28,4 @@ beautifulsoup4~=4.11.1 lxml sentry-sdk>=0.10.2 sse_starlette +graphql-ws diff --git a/resolvers/inbox/messages.py b/resolvers/inbox/messages.py index de05b2e6..de20567f 100644 --- a/resolvers/inbox/messages.py +++ b/resolvers/inbox/messages.py @@ -140,15 +140,12 @@ async def mark_as_read(_, info, chat_id: str, messages: [int]): } -@subscription.source("newMessages") +@subscription.source("newMessage") @login_required async def message_generator(obj, info): print(f"[resolvers.messages] generator {info}") auth: AuthCredentials = info.context["request"].auth - return await messages_generator_by_user(auth.user_id) - - -async def messages_generator_by_user(user_id): + user_id = auth.user_id try: user_following_chats = await redis.execute("GET", f"chats_by_user/{user_id}") if user_following_chats: diff --git a/schema.graphql b/schema.graphql index 092fdf87..61eaeb59 100644 --- a/schema.graphql +++ b/schema.graphql @@ -305,11 +305,9 @@ type Query { ############################################ Subscription type Subscription { - newMessages: Message - onlineUpdated: [User!]! - shoutUpdated: Shout! - userUpdated: User! - reactionUpdated(shout: String!): ReactionUpdating! + newMessage: Message # new messages in inbox + collabUpdate(collab: Int!): Reaction # new reactions in collaborative editor + } ############################################ Entities