mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
Optimize FrozenEvent creation
This commit is contained in:
parent
36a2a877e2
commit
dfa05f0cd6
2 changed files with 16 additions and 9 deletions
|
@ -20,7 +20,7 @@ import copy
|
|||
|
||||
class _EventInternalMetadata(object):
|
||||
def __init__(self, internal_metadata_dict):
|
||||
self.__dict__ = copy.deepcopy(internal_metadata_dict)
|
||||
self.__dict__ = internal_metadata_dict
|
||||
|
||||
def get_dict(self):
|
||||
return dict(self.__dict__)
|
||||
|
@ -49,10 +49,10 @@ def _event_dict_property(key):
|
|||
class EventBase(object):
|
||||
def __init__(self, event_dict, signatures={}, unsigned={},
|
||||
internal_metadata_dict={}):
|
||||
self.signatures = copy.deepcopy(signatures)
|
||||
self.unsigned = copy.deepcopy(unsigned)
|
||||
self.signatures = signatures
|
||||
self.unsigned = unsigned
|
||||
|
||||
self._event_dict = copy.deepcopy(event_dict)
|
||||
self._event_dict = event_dict
|
||||
|
||||
self.internal_metadata = _EventInternalMetadata(
|
||||
internal_metadata_dict
|
||||
|
@ -112,10 +112,16 @@ class EventBase(object):
|
|||
|
||||
class FrozenEvent(EventBase):
|
||||
def __init__(self, event_dict, internal_metadata_dict={}):
|
||||
event_dict = copy.deepcopy(event_dict)
|
||||
event_dict = dict(event_dict)
|
||||
|
||||
signatures = copy.deepcopy(event_dict.pop("signatures", {}))
|
||||
unsigned = copy.deepcopy(event_dict.pop("unsigned", {}))
|
||||
# Signatures is a dict of dicts, and this is faster than doing a
|
||||
# copy.deepcopy
|
||||
signatures = {
|
||||
name: {sig_id: sig for sig_id, sig in sigs.items()}
|
||||
for name, sigs in event_dict.pop("signatures", {}).items()
|
||||
}
|
||||
|
||||
unsigned = dict(event_dict.pop("unsigned", {}))
|
||||
|
||||
frozen_dict = freeze(event_dict)
|
||||
|
||||
|
|
|
@ -17,10 +17,11 @@ from frozendict import frozendict
|
|||
|
||||
|
||||
def freeze(o):
|
||||
if isinstance(o, dict) or isinstance(o, frozendict):
|
||||
t = type(o)
|
||||
if t is dict:
|
||||
return frozendict({k: freeze(v) for k, v in o.items()})
|
||||
|
||||
if isinstance(o, basestring):
|
||||
if t is str or t is unicode:
|
||||
return o
|
||||
|
||||
try:
|
||||
|
|
Loading…
Reference in a new issue