Source code for luna_handlers.redis_db.redis_context

import ujson as json

from classes.event import HandlerEvent as Event
from classes.schemas.event_raw import RawEvent
from crutches_on_wheels.cow.redis_db.redis_sender_context import RedisContext as _SenderRedisContext


async def _performPublish(ctx, msg: dict, accountId: str):
    """
    Publish msg with to redis
    Args:
        ctx: redis context
        msg: msg
        accountId: account id
    """

    try:
        await ctx.redis.publish(f"{ctx.channelName}:{accountId}", json.dumps(msg, ensure_ascii=False))
    except Exception:
        ctx.logger.exception("publish events to redis")


async def _publish(ctx, events: list[Event], accountId: str, requestId: str) -> None:
    """
    Publish events. Msg is published to channel 'luna-sender:{account_id}' in format:
    :json:object:`msg_to_luna_sender`

    Args:
        ctx: redis context
        events: events
        accountId: account id
        requestId: request id
    """
    if len(events) == 0:
        return
    msg = {
        "handler_id": events[0].handlerId,
        "Luna-Request-Id": requestId,
        "events": [event.raw for event in events],
        "event_create_time": events[0].createTime,
        "event_end_time": events[0].endTime,
    }

    await _performPublish(ctx, msg, accountId)


[docs] class RedisContext(_SenderRedisContext): """Redis context"""
[docs] async def publish(self, events: list[Event], accountId: str, requestId: str) -> None: """ Publish events. Msg is published to channel 'luna-sender:{account_id}' in format: :json:object:`msg_to_luna_sender` Args: events: events accountId: account id requestId: request id """ await _publish(self, events, accountId, requestId)
[docs] async def publishRawEvent( self, event: RawEvent, accountId: str, handlerId: str, requestId: str, ) -> None: """ Publish events. Msg is published to channel 'luna-sender:{account_id}' in format: :json:object:`msg_to_luna_sender` Args: event: user raw event accountId: account id handlerId: handler id requestId: request id """ msg = { "handler_id": handlerId, "Luna-Request-Id": requestId, "events": [event.asDict()], "event_create_time": event.createTime, "event_end_time": event.endTime, } await _performPublish(self, msg, accountId)