subs-on-ws

This commit is contained in:
tonyrewin 2022-12-07 21:51:38 +03:00
parent c9400f23fb
commit 044bfa5bd4
4 changed files with 17 additions and 14 deletions

13
main.py
View File

@ -21,7 +21,7 @@ from services.zine.gittask import GitTask
from settings import DEV_SERVER_STATUS_FILE_NAME, SENTRY_DSN from settings import DEV_SERVER_STATUS_FILE_NAME, SENTRY_DSN
from ariadne.asgi.handlers import GraphQLTransportWSHandler from ariadne.asgi.handlers import GraphQLTransportWSHandler
from services.inbox.presence import on_connect, on_disconnect 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") import_module("resolvers")
@ -68,7 +68,7 @@ routes = [
Route("/oauth/{provider}", endpoint=oauth_login), Route("/oauth/{provider}", endpoint=oauth_login),
Route("/oauth-authorize", endpoint=oauth_authorize), Route("/oauth-authorize", endpoint=oauth_authorize),
Route("/confirm/{token}", endpoint=confirm_email_handler), Route("/confirm/{token}", endpoint=confirm_email_handler),
Route("/messages", endpoint=sse_messages) # Route("/messages", endpoint=sse_messages)
] ]
app = Starlette( app = Starlette(
@ -94,4 +94,11 @@ dev_app = app = Starlette(
middleware=middleware, middleware=middleware,
routes=routes, 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
)
))

View File

@ -6,7 +6,7 @@ PyYAML>=5.4
pyjwt>=2.6.0 pyjwt>=2.6.0
starlette~=0.20.4 starlette~=0.20.4
sqlalchemy>=1.4.41 sqlalchemy>=1.4.41
graphql-core graphql-core>=3.0.3
gql gql
uvicorn>=0.18.3 uvicorn>=0.18.3
pydantic>=1.10.2 pydantic>=1.10.2
@ -28,3 +28,4 @@ beautifulsoup4~=4.11.1
lxml lxml
sentry-sdk>=0.10.2 sentry-sdk>=0.10.2
sse_starlette sse_starlette
graphql-ws

View File

@ -140,15 +140,12 @@ async def mark_as_read(_, info, chat_id: str, messages: [int]):
} }
@subscription.source("newMessages") @subscription.source("newMessage")
@login_required @login_required
async def message_generator(obj, info): async def message_generator(obj, info):
print(f"[resolvers.messages] generator {info}") print(f"[resolvers.messages] generator {info}")
auth: AuthCredentials = info.context["request"].auth auth: AuthCredentials = info.context["request"].auth
return await messages_generator_by_user(auth.user_id) user_id = auth.user_id
async def messages_generator_by_user(user_id):
try: try:
user_following_chats = await redis.execute("GET", f"chats_by_user/{user_id}") user_following_chats = await redis.execute("GET", f"chats_by_user/{user_id}")
if user_following_chats: if user_following_chats:

View File

@ -305,11 +305,9 @@ type Query {
############################################ Subscription ############################################ Subscription
type Subscription { type Subscription {
newMessages: Message newMessage: Message # new messages in inbox
onlineUpdated: [User!]! collabUpdate(collab: Int!): Reaction # new reactions in collaborative editor
shoutUpdated: Shout!
userUpdated: User!
reactionUpdated(shout: String!): ReactionUpdating!
} }
############################################ Entities ############################################ Entities