felicity-lims/backend/felicity_lims/felicity/api/gql/notification/subscription.py

41 lines
1.3 KiB
Python
Raw Normal View History

2021-12-13 00:20:48 +08:00
import asyncio
import logging
from typing import AsyncGenerator
2021-12-13 00:20:48 +08:00
import strawberry # noqa
2022-11-06 20:09:44 +08:00
from felicity.api.gql.notification.types import ActivityStreamType
from felicity.apps.common.channel import BroadcastEvent, Subscriber, broadcast
2022-01-13 05:06:57 +08:00
from felicity.apps.notification.models import ActivityStream
2021-12-13 00:20:48 +08:00
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@strawberry.type
class StreamSubscription:
@strawberry.subscription
async def count(self, target: int = 100) -> int:
for i in range(target):
yield i
await asyncio.sleep(0.5)
@strawberry.subscription
async def latest_stream(self) -> AsyncGenerator[ActivityStreamType, None]: # noqa
2021-12-13 00:20:48 +08:00
subscriber: Subscriber
async with broadcast.subscribe(channel="activities") as subscriber:
logger.info("Subscribed")
event: BroadcastEvent
try:
async for event in subscriber:
logger.info(event)
yield event.message
finally:
logger.info("Unsubscribed")
@strawberry.subscription
async def test_stream(self) -> AsyncGenerator[ActivityStreamType, None]: # noqa
2021-12-13 00:20:48 +08:00
streams = await ActivityStream.all()
for stream in streams:
yield stream
await asyncio.sleep(1)