diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index 34b1b944ab..4252e5ab5c 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014 OpenMarket Ltd
+# Copyright 2014, 2015 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -15,12 +15,10 @@
from synapse.util.frozenutils import freeze, unfreeze
-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 +47,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 +110,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 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()
+ }
- signatures = copy.deepcopy(event_dict.pop("signatures", {}))
- unsigned = copy.deepcopy(event_dict.pop("unsigned", {}))
+ unsigned = dict(event_dict.pop("unsigned", {}))
frozen_dict = freeze(event_dict)
diff --git a/synapse/events/builder.py b/synapse/events/builder.py
index 9579b1fe8b..d4cb602ebb 100644
--- a/synapse/events/builder.py
+++ b/synapse/events/builder.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014 OpenMarket Ltd
+# Copyright 2014, 2015 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/synapse/events/snapshot.py b/synapse/events/snapshot.py
index b9fb29be01..6bbba8d6ba 100644
--- a/synapse/events/snapshot.py
+++ b/synapse/events/snapshot.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014 OpenMarket Ltd
+# Copyright 2014, 2015 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index 94f3f15f52..bcb5457278 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014 OpenMarket Ltd
+# Copyright 2014, 2015 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -89,16 +89,24 @@ def prune_event(event):
return type(event)(allowed_fields)
-def serialize_event(hs, e):
+def serialize_event(hs, e, client_event=True):
# FIXME(erikj): To handle the case of presence events and the like
if not isinstance(e, EventBase):
return e
# Should this strip out None's?
d = {k: v for k, v in e.get_dict().items()}
+
+ if not client_event:
+ # set the age and keep all other keys
+ if "age_ts" in d["unsigned"]:
+ now = int(hs.get_clock().time_msec())
+ d["unsigned"]["age"] = now - d["unsigned"]["age_ts"]
+ return d
+
if "age_ts" in d["unsigned"]:
now = int(hs.get_clock().time_msec())
- d["unsigned"]["age"] = now - d["unsigned"]["age_ts"]
+ d["age"] = now - d["unsigned"]["age_ts"]
del d["unsigned"]["age_ts"]
d["user_id"] = d.pop("sender", None)
@@ -126,5 +134,8 @@ def serialize_event(hs, e):
del d["prev_events"]
del d["hashes"]
del d["signatures"]
+ d.pop("depth", None)
+ d.pop("unsigned", None)
+ d.pop("origin", None)
return d
diff --git a/synapse/events/validator.py b/synapse/events/validator.py
index ebc6c30e62..0ee6872d1e 100644
--- a/synapse/events/validator.py
+++ b/synapse/events/validator.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014 OpenMarket Ltd
+# Copyright 2014, 2015 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
|