platypush/platypush/backend/http/app/ws/events.py

34 lines
800 B
Python

from typing_extensions import override
from platypush.message.event import Event
from . import WSRoute, logger, pubsub_redis_topic
events_redis_topic = pubsub_redis_topic('events')
class WSEventProxy(WSRoute):
"""
Websocket event proxy mapped to ``/ws/events``.
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.subscribe(events_redis_topic)
@classmethod
@override
def app_name(cls) -> str:
return 'events'
@override
def run(self) -> None:
for msg in self.listen():
try:
evt = Event.build(msg.decode())
except Exception as e:
logger.warning('Error parsing event: %s: %s', msg, e)
continue
self.send(str(evt))