Don't unfreeze when using FreezeEvent.get_dict, as we are using a JSONEncoder that understands FrozenDict
This commit is contained in:
parent
4ebbaf0d43
commit
ddb816cf60
|
@ -140,10 +140,6 @@ class FrozenEvent(EventBase):
|
|||
|
||||
return e
|
||||
|
||||
def get_dict(self):
|
||||
# We need to unfreeze what we return
|
||||
return unfreeze(super(FrozenEvent, self).get_dict())
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
|
|
|
@ -23,7 +23,8 @@ from twisted.internet import defer
|
|||
|
||||
from synapse.util.logutils import log_function
|
||||
|
||||
import simplejson as json
|
||||
from syutil.jsonutil import encode_canonical_json
|
||||
|
||||
import logging
|
||||
|
||||
|
||||
|
@ -70,7 +71,7 @@ class TransactionActions(object):
|
|||
transaction.transaction_id,
|
||||
transaction.origin,
|
||||
code,
|
||||
json.dumps(response)
|
||||
encode_canonical_json(response)
|
||||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
|
@ -100,5 +101,5 @@ class TransactionActions(object):
|
|||
transaction.transaction_id,
|
||||
transaction.destination,
|
||||
response_code,
|
||||
json.dumps(response_dict)
|
||||
encode_canonical_json(response_dict)
|
||||
)
|
||||
|
|
|
@ -23,6 +23,7 @@ from synapse.api.errors import (
|
|||
from synapse.api.constants import EventTypes, Membership, RejectedReason
|
||||
from synapse.util.logutils import log_function
|
||||
from synapse.util.async import run_on_reactor
|
||||
from synapse.util.frozenutils import unfreeze
|
||||
from synapse.crypto.event_signing import (
|
||||
compute_event_signature, add_hashes_and_signatures,
|
||||
)
|
||||
|
@ -311,9 +312,12 @@ class FederationHandler(BaseHandler):
|
|||
self.room_queues[room_id] = []
|
||||
|
||||
builder = self.event_builder_factory.new(
|
||||
event.get_pdu_json()
|
||||
unfreeze(event.get_pdu_json())
|
||||
)
|
||||
|
||||
logger.info("Builder: %s", builder.get_pdu_json())
|
||||
logger.info("Content: %s", content)
|
||||
|
||||
handled_events = set()
|
||||
|
||||
try:
|
||||
|
@ -324,14 +328,21 @@ class FederationHandler(BaseHandler):
|
|||
if not hasattr(event, "signatures"):
|
||||
builder.signatures = {}
|
||||
|
||||
logger.info("Content befhahs: %s", builder.content)
|
||||
|
||||
add_hashes_and_signatures(
|
||||
builder,
|
||||
self.hs.hostname,
|
||||
self.hs.config.signing_key[0],
|
||||
)
|
||||
|
||||
logger.info("Content aftet hah: %s", builder.content)
|
||||
logger.info("Content pdu json: %s", builder.get_pdu_json())
|
||||
|
||||
new_event = builder.build()
|
||||
|
||||
logger.info("Content after build: %s", new_event.content)
|
||||
|
||||
# Try the host we successfully got a response to /make_join/
|
||||
# request first.
|
||||
try:
|
||||
|
@ -340,6 +351,7 @@ class FederationHandler(BaseHandler):
|
|||
except ValueError:
|
||||
pass
|
||||
|
||||
logger.info(new_event.content)
|
||||
ret = yield self.replication_layer.send_join(
|
||||
target_hosts,
|
||||
new_event
|
||||
|
@ -485,6 +497,7 @@ class FederationHandler(BaseHandler):
|
|||
|
||||
event.internal_metadata.outlier = False
|
||||
|
||||
logger.info(event.content)
|
||||
context = yield self._handle_new_event(origin, event)
|
||||
|
||||
logger.debug(
|
||||
|
|
|
@ -403,7 +403,9 @@ class RoomMemberHandler(BaseHandler):
|
|||
"membership": Membership.JOIN,
|
||||
"content": content,
|
||||
})
|
||||
logger.info("Before build: %s", builder.get_pdu_json())
|
||||
event, context = yield self._create_new_client_event(builder)
|
||||
logger.info("After build: %s", event.get_dict())
|
||||
|
||||
yield self._do_join(event, context, room_hosts=hosts, do_auth=True)
|
||||
|
||||
|
@ -462,7 +464,7 @@ class RoomMemberHandler(BaseHandler):
|
|||
room_hosts,
|
||||
room_id,
|
||||
event.user_id,
|
||||
event.get_dict()["content"], # FIXME To get a non-frozen dict
|
||||
event.content, # FIXME To get a non-frozen dict
|
||||
context
|
||||
)
|
||||
else:
|
||||
|
|
|
@ -298,12 +298,16 @@ class DataStore(RoomMemberStore, RoomStore,
|
|||
or_replace=True,
|
||||
)
|
||||
|
||||
content = encode_canonical_json(
|
||||
event.content
|
||||
).decode("UTF-8")
|
||||
|
||||
vals = {
|
||||
"topological_ordering": event.depth,
|
||||
"event_id": event.event_id,
|
||||
"type": event.type,
|
||||
"room_id": event.room_id,
|
||||
"content": json.dumps(event.get_dict()["content"]),
|
||||
"content": content,
|
||||
"processed": True,
|
||||
"outlier": outlier,
|
||||
"depth": event.depth,
|
||||
|
@ -323,7 +327,10 @@ class DataStore(RoomMemberStore, RoomStore,
|
|||
"prev_events",
|
||||
]
|
||||
}
|
||||
vals["unrecognized_keys"] = json.dumps(unrec)
|
||||
|
||||
vals["unrecognized_keys"] = encode_canonical_json(
|
||||
unrec
|
||||
).decode("UTF-8")
|
||||
|
||||
try:
|
||||
self._simple_insert_txn(
|
||||
|
|
|
@ -21,6 +21,9 @@ def freeze(o):
|
|||
if t is dict:
|
||||
return frozendict({k: freeze(v) for k, v in o.items()})
|
||||
|
||||
if t is frozendict:
|
||||
return o
|
||||
|
||||
if t is str or t is unicode:
|
||||
return o
|
||||
|
||||
|
@ -33,10 +36,11 @@ def freeze(o):
|
|||
|
||||
|
||||
def unfreeze(o):
|
||||
if isinstance(o, frozendict) or isinstance(o, dict):
|
||||
t = type(o)
|
||||
if t is dict or t is frozendict:
|
||||
return dict({k: unfreeze(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 New Issue