def from_msg(cls, org: Org, user: User, obj: Msg) -> dict: """ Reconstructs an engine event from a msg instance. Properties which aren't part of regular events are prefixed with an underscore. """ channel_log = obj.get_last_log() logs_url = _url_for_user( org, user, "channels.channellog_read", args=[channel_log.id]) if channel_log else None if obj.direction == Msg.DIRECTION_IN: return { "type": cls.TYPE_MSG_RECEIVED, "created_on": get_event_time(obj).isoformat(), "msg": _msg_in(obj), # additional properties "msg_type": obj.msg_type, "logs_url": logs_url, } elif obj.broadcast and obj.broadcast.get_message_count() > 1: return { "type": cls.TYPE_BROADCAST_CREATED, "created_on": get_event_time(obj).isoformat(), "translations": obj.broadcast.text, "base_language": obj.broadcast.base_language, # additional properties "msg": _msg_out(obj), "status": obj.status, "recipient_count": obj.broadcast.get_message_count(), "logs_url": logs_url, } else: msg_event = { "type": cls.TYPE_IVR_CREATED if obj.msg_type == Msg.TYPE_IVR else cls.TYPE_MSG_CREATED, "created_on": get_event_time(obj).isoformat(), "msg": _msg_out(obj), # additional properties "status": obj.status, "logs_url": logs_url, } if obj.broadcast and obj.broadcast.created_by: user = obj.broadcast.created_by msg_event["msg"]["created_by"] = { "id": user.id, "first_name": user.first_name, "last_name": user.last_name, "email": user.email, } return msg_event
def from_msg(cls, org: Org, user: User, obj: Msg) -> dict: """ Reconstructs an engine event from a msg instance. Properties which aren't part of regular events are prefixed with an underscore. """ from temba.msgs.models import INCOMING, IVR channel_log = obj.get_last_log() logs_url = _url_for_user(org, user, "channels.channellog_read", args=[channel_log.id]) if channel_log else None if obj.direction == INCOMING: return { "type": cls.TYPE_MSG_RECEIVED, "created_on": get_event_time(obj).isoformat(), "msg": _msg_in(obj), # additional properties "msg_type": obj.msg_type, "logs_url": logs_url, } elif obj.broadcast and obj.broadcast.get_message_count() > 1: return { "type": cls.TYPE_BROADCAST_CREATED, "created_on": get_event_time(obj).isoformat(), "translations": obj.broadcast.text, "base_language": obj.broadcast.base_language, # additional properties "msg": _msg_out(obj), "status": obj.status, "recipient_count": obj.broadcast.get_message_count(), "logs_url": logs_url, } elif obj.msg_type == IVR: return { "type": cls.TYPE_IVR_CREATED, "created_on": get_event_time(obj).isoformat(), "msg": _msg_out(obj), # additional properties "status": obj.status, "logs_url": logs_url, } else: return { "type": cls.TYPE_MSG_CREATED, "created_on": get_event_time(obj).isoformat(), "msg": _msg_out(obj), # additional properties "status": obj.status, "logs_url": logs_url, }