add message subscription

This commit is contained in:
knst-kotov
2021-07-02 12:16:43 +03:00
parent 7b5065616f
commit a70421f243
3 changed files with 50 additions and 4 deletions

View File

@@ -1,6 +1,15 @@
from ariadne import MutationType, QueryType
from ariadne import MutationType, QueryType, SubscriptionType, ScalarType
query = QueryType()
mutation = MutationType()
subscription = SubscriptionType()
resolvers = [query, mutation]
datetime_scalar = ScalarType("DateTime")
@datetime_scalar.serializer
def serialize_datetime(value):
return value.isoformat()
resolvers = [query, mutation, subscription, datetime_scalar]

View File

@@ -1,10 +1,16 @@
from orm import Message, User
from orm.base import global_session
from resolvers.base import mutation, query
from resolvers.base import mutation, query, subscription
from auth.authenticate import login_required
import asyncio
new_message_queue = asyncio.Queue()
updated_message_queue = asyncio.Queue()
deleted_message_queue = asyncio.Queue()
@mutation.field("createMessage")
@login_required
async def create_message(_, info, input):
@@ -17,6 +23,8 @@ async def create_message(_, info, input):
replyTo = input.get("replyTo")
)
new_message_queue.put_nowait(new_message)
return {
"status": True,
"message" : new_message
@@ -61,6 +69,8 @@ async def update_message(_, info, input):
message.body = input["body"]
global_session.commit()
updated_message_queue.put_nowait(message)
return {
"status" : True,
"message" : message
@@ -83,6 +93,33 @@ async def delete_message(_, info, id):
global_session.delete(message)
global_session.commit()
deleted_message_queue.put_nowait(message)
return {
"status" : True
}
@subscription.source("messageCreated")
async def new_message_generator(obj, info):
while True:
new_message = await new_message_queue.get()
yield new_message
@subscription.source("messageUpdated")
async def updated_message_generator(obj, info):
while True:
message = await updated_message_queue.get()
yield message
@subscription.source("messageDeleted")
async def deleted_message_generator(obj, info):
while True:
message = await deleted_message_queue.get()
yield new_message
@subscription.field("messageCreated")
@subscription.field("messageUpdated")
@subscription.field("messageDeleted")
def message_resolver(message, info):
return message