summary refs log tree commit diff
path: root/synapse/events/utils.py
diff options
context:
space:
mode:
authorErik Johnston <erikj@jki.re>2019-05-15 10:36:30 +0100
committerGitHub <noreply@github.com>2019-05-15 10:36:30 +0100
commit0aba6c82513802822482de6e1e797b07502b92b5 (patch)
tree5da1073792ad81b5d192dce649b8518cd1907b6b /synapse/events/utils.py
parentMerge pull request #5184 from matrix-org/erikj/expose_get_events_as_array (diff)
parentUpdate docstring with correct return type (diff)
downloadsynapse-0aba6c82513802822482de6e1e797b07502b92b5.tar.xz
Merge pull request #5183 from matrix-org/erikj/async_serialize_event
Allow client event serialization to be async
Diffstat (limited to 'synapse/events/utils.py')
-rw-r--r--synapse/events/utils.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/synapse/events/utils.py b/synapse/events/utils.py

index 07fccdd8f9..a5454556cc 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py
@@ -19,7 +19,10 @@ from six import string_types from frozendict import frozendict +from twisted.internet import defer + from synapse.api.constants import EventTypes +from synapse.util.async_helpers import yieldable_gather_results from . import EventBase @@ -311,3 +314,44 @@ def serialize_event(e, time_now_ms, as_client_event=True, d = only_fields(d, only_event_fields) return d + + +class EventClientSerializer(object): + """Serializes events that are to be sent to clients. + + This is used for bundling extra information with any events to be sent to + clients. + """ + + def __init__(self, hs): + pass + + def serialize_event(self, event, time_now, **kwargs): + """Serializes a single event. + + Args: + event (EventBase) + time_now (int): The current time in milliseconds + **kwargs: Arguments to pass to `serialize_event` + + Returns: + Deferred[dict]: The serialized event + """ + event = serialize_event(event, time_now, **kwargs) + return defer.succeed(event) + + def serialize_events(self, events, time_now, **kwargs): + """Serializes multiple events. + + Args: + event (iter[EventBase]) + time_now (int): The current time in milliseconds + **kwargs: Arguments to pass to `serialize_event` + + Returns: + Deferred[list[dict]]: The list of serialized events + """ + return yieldable_gather_results( + self.serialize_event, events, + time_now=time_now, **kwargs + )