summary refs log tree commit diff
path: root/synapse/events/utils.py
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2024-04-23 17:10:20 +0100
committerRichard van der Hoff <richard@matrix.org>2024-04-23 17:10:20 +0100
commit6a4c6a1492e6a578090227b6e8ff0ab892bd6903 (patch)
tree9247f1020288d0cbe68b8206987c30ab6083dc27 /synapse/events/utils.py
parentMerge branch 'rav/log_state_desync' into active_branches_base (diff)
parentEnable MSC4115 in complement tests (diff)
downloadsynapse-github/rav/work.tar.xz
Merge branch 'rav/event_visibility' into active_branches_base github/rav/work rav/work
Diffstat (limited to 'synapse/events/utils.py')
-rw-r--r--synapse/events/utils.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/synapse/events/utils.py b/synapse/events/utils.py

index e0613d0dbc..8b7c5885db 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py
@@ -49,7 +49,7 @@ from synapse.api.errors import Codes, SynapseError from synapse.api.room_versions import RoomVersion from synapse.types import JsonDict, Requester -from . import EventBase +from . import EventBase, make_event_from_dict if TYPE_CHECKING: from synapse.handlers.relations import BundledAggregations @@ -82,8 +82,6 @@ def prune_event(event: EventBase) -> EventBase: """ pruned_event_dict = prune_event_dict(event.room_version, event.get_dict()) - from . import make_event_from_dict - pruned_event = make_event_from_dict( pruned_event_dict, event.room_version, event.internal_metadata.get_dict() ) @@ -101,6 +99,25 @@ def prune_event(event: EventBase) -> EventBase: return pruned_event +def clone_event(event: EventBase) -> EventBase: + """Take a copy of the event. + + This is mostly useful because it does a *shallow* copy of the `unsigned` data, + which means it can then be updated without corrupting the in-memory cache. + """ + new_event = make_event_from_dict( + event.get_dict(), event.room_version, event.internal_metadata.get_dict() + ) + + # copy the internal fields + new_event.internal_metadata.stream_ordering = ( + event.internal_metadata.stream_ordering + ) + new_event.internal_metadata.outlier = event.internal_metadata.outlier + + return new_event + + def prune_event_dict(room_version: RoomVersion, event_dict: JsonDict) -> JsonDict: """Redacts the event_dict in the same way as `prune_event`, except it operates on dicts rather than event objects